如何在虚拟环境中选择合适的 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.pythonspark.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 对您来说不方便,请尝试另一个。