如何在虚拟环境中选择合适的 Python 版本?
How to pick a proper version of Python in virtual ebvironment?
我创建了一个虚拟环境和 运行 PySpark 脚本。如果我在 MacOS 上执行这些步骤,一切正常。但是,如果我 运行 他们在 Linux (Ubuntu 16) 上,那么会选择不正确的 Python 版本。当然,我之前在 Linux 上做过 export PYSPARK_PYTHON=python3
,但仍然是同样的问题。下面我解释所有步骤:
1. edit profile :vim ~/.profile
2. add the code into the file: export PYSPARK_PYTHON=python3
3. execute command: source ~/.profile
然后我做:
pip3 install --upgrade pip
pip3 install virtualenv
wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
tar -xvzf spark-2.4.0-bin-hadoop2.7.tgz && rm spark-2.4.0-bin-hadoop2.7.tgz
virtualenv tes-ve
source test-ve/bin/activate && pip install -r requirements.txt
如果我在视觉环境中执行 python --version
,我会看到 Python 3.5.2
。
然而,当我使用此命令 运行 Spark 代码时:sudo /usr/local/spark-2.4.0-bin-hadoop2.7/bin/spark-submit mySpark.py
,我得到这些代码行的 Using Python version 2.7...
:
print("Using Python version %s (%s, %s)" % (
platform.python_version(),
platform.python_build()[0],
platform.python_build()[1]))
PYSPARK_PYTHON
设置用于在从属节点上执行 Python 的调用。有一个名为 PYSPARK_DRIVER_PYTHON
的单独环境变量,它设置对驱动程序节点的调用(即您的脚本最初所在的节点 运行)。所以你也需要设置PYSPARK_DRIVER_PYTHON=python3
。
编辑
正如 phd 指出的那样,由于您正在使用 sudo
调用 Pyspark 提交,因此您可能 运行 遇到环境问题。要尝试的一件事是使用 sudo -E
而不是 sudo
。 -E
选项将 preserve your environment(尽管它并不完美)。
如果失败,您可以尝试直接设置spark.pyspark.driver.python
和spark.pyspark.python
选项。例如,您可以将所需的值传递到对 spark-submit
:
的调用中
sudo /usr/local/spark-2.4.0-bin-hadoop2.7/bin/spark-submit --conf spark.pyspark.driver.python=python3 --conf spark.pyspark.python=python3 mySpark.py
有许多不同的方法来设置这些选项(有关完整详细信息,请参阅 this doc)。如果一个 work/is 对您来说不方便,请尝试另一个。
我创建了一个虚拟环境和 运行 PySpark 脚本。如果我在 MacOS 上执行这些步骤,一切正常。但是,如果我 运行 他们在 Linux (Ubuntu 16) 上,那么会选择不正确的 Python 版本。当然,我之前在 Linux 上做过 export PYSPARK_PYTHON=python3
,但仍然是同样的问题。下面我解释所有步骤:
1. edit profile :vim ~/.profile
2. add the code into the file: export PYSPARK_PYTHON=python3
3. execute command: source ~/.profile
然后我做:
pip3 install --upgrade pip
pip3 install virtualenv
wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
tar -xvzf spark-2.4.0-bin-hadoop2.7.tgz && rm spark-2.4.0-bin-hadoop2.7.tgz
virtualenv tes-ve
source test-ve/bin/activate && pip install -r requirements.txt
如果我在视觉环境中执行 python --version
,我会看到 Python 3.5.2
。
然而,当我使用此命令 运行 Spark 代码时:sudo /usr/local/spark-2.4.0-bin-hadoop2.7/bin/spark-submit mySpark.py
,我得到这些代码行的 Using Python version 2.7...
:
print("Using Python version %s (%s, %s)" % (
platform.python_version(),
platform.python_build()[0],
platform.python_build()[1]))
PYSPARK_PYTHON
设置用于在从属节点上执行 Python 的调用。有一个名为 PYSPARK_DRIVER_PYTHON
的单独环境变量,它设置对驱动程序节点的调用(即您的脚本最初所在的节点 运行)。所以你也需要设置PYSPARK_DRIVER_PYTHON=python3
。
编辑
正如 phd 指出的那样,由于您正在使用 sudo
调用 Pyspark 提交,因此您可能 运行 遇到环境问题。要尝试的一件事是使用 sudo -E
而不是 sudo
。 -E
选项将 preserve your environment(尽管它并不完美)。
如果失败,您可以尝试直接设置spark.pyspark.driver.python
和spark.pyspark.python
选项。例如,您可以将所需的值传递到对 spark-submit
:
sudo /usr/local/spark-2.4.0-bin-hadoop2.7/bin/spark-submit --conf spark.pyspark.driver.python=python3 --conf spark.pyspark.python=python3 mySpark.py
有许多不同的方法来设置这些选项(有关完整详细信息,请参阅 this doc)。如果一个 work/is 对您来说不方便,请尝试另一个。