Virtualenv没有使用正确版本的Python。

6

我在亚马逊的Cloud9上工作。

ec2-user:~/environment/flask_init $ python -V
Python 2.7.14
ec2-user:~/environment/flask_init $ virtualenv -p python3 venv
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/ec2-user/environment/flask_init/venv/bin/python3
Also creating executable in /home/ec2-user/environment/flask_init/venv/bin/python
Installing setuptools, pip, wheel...done.
ec2-user:~/environment/flask_init $ source venv/bin/activate
(venv) ec2-user:~/environment/flask_init $ python -V
Python 2.7.14

为什么虚拟环境没有使用Python 3?
请注意,这个问题不是这个问题的重复。这个问题特别涉及Cloud 9环境设置Python别名的方式。

1
你可以尝试在创建虚拟环境时使用完整路径指定 python3 的位置,例如:virtualenv -p path/to/python3 venv - ansu5555
当我使用链接/usr/bin/python3创建时,仍然无法工作。 - RubyNoob
@RubyNoob 你能否再试一次使用 -v 标志创建 venv,并将日志粘贴到问题中? - Dluzak
你的输出看起来没问题,可以尝试执行 python3 -v 命令,如果输出为 Python 3.x,那么请尝试运行 python3 -m virtualenv venv 命令。 - ansu5555
@RubyNoob 你有一个名为 python 的 shell 别名吗?你可以尝试以下命令:which python; $(which python) --version - phd
显示剩余2条评论
4个回答

4

我在我的电脑上尝试了您的流程,一切都按预期工作。

dluzak@Karol-PC:/tmp$ python -V
Python 2.7.12
dluzak@Karol-PC:/tmp$ virtualenv -p python3 venv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /tmp/venv/bin/python3
Also creating executable in /tmp/venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
dluzak@Karol-PC:/tmp$ source venv/bin/activate
(venv) dluzak@Karol-PC:/tmp$ python -V
Python 3.5.2
(venv) dluzak@Karol-PC:/tmp$ 

尽管如此,我个人在使用Python 3创建虚拟环境时会将virtualenv作为模块使用:python3 -m virtualenv venv。也许这样会起作用。
您提供的细节非常少。您是否已经为Python 2和3都安装了virtualenv?您确定Python 3解释器运行正常吗?
编辑:
在评论中进行调查后,我们发现问题出在Amazon配置的bash设置上。似乎Amazon在bash(可能是~/.bashrc)中配置别名来替换Python调用。要解决这个问题,需要在启用venv之前调用unalias python。这在Amazon文档中有描述。

谢谢您的建议。Python 3解释器正在运行并显示v3.6.5。python3 -m pip install virtualenv 给出了 Requirement already satisfied: virtualenv in /usr/local/lib/python3.6/site-packages 的提示。我尝试了您的模块方法,但虚拟环境仍在运行Python 2。 - RubyNoob
好像虚拟环境没有运行,因为当我在其中并运行python3时,它会打开python3解释器。所以它似乎有两个Python,并默认使用python3,就像主机环境没有运行虚拟环境一样。 - RubyNoob
感谢@Dluzak。我运行了它,这是结果。(https://pastebin.com/31Jx2iwM)。它似乎指向Python 3二进制文件,对吗? - RubyNoob
@Dluzac alias python='python27' /usr/bin/python27. 我想知道这是否只是Amazon Cloud9设置的问题。过去我在本地机器上使用virtualenv没有遇到任何问题。 - RubyNoob
太棒了!非常感谢,@Dluzak。 - RubyNoob
显示剩余7条评论

1
当我今天早些时候使用virtualenv时,我遇到了同样的问题,我的环境没有使用正确版本的python。
与其像这样激活我的环境:
source activate 我发现像这样激活它实际上是可以工作的:
source ./activate 希望这有所帮助!

1

以下是我在Cloud9上创建virtualenv的方法

Python 3.4

$ sudo pip install virtualenv
$ virtualenv -p /usr/bin/python3.4 venv
$ source venv/bin/activate

Python 3.6

$ sudo apt update
$ sudo apt install python3.6-venv
$ python3.6 -mvenv venv
$ source venv/bin/activate

0

我遇到了类似的问题。 在我的情况下,它没有起作用,因为我移动了虚拟环境文件夹(但是重命名时也会发生同样的事情)。

您可以通过键入来了解使用哪个版本的Python(因此将导入哪个模块)

$ which python

如果它写了类似这样的东西:
/usr/bin/python

那么这意味着您的虚拟环境未被激活。
为了解决此问题,您可以简单地编辑环境中的脚本激活文件,而不是创建新的虚拟环境:

$ nano venv/bin/activate

请使用您虚拟环境的绝对路径编辑以下行:

VIRTUAL_ENV="/YOUR_ABSOLUT/PATH_TO/venv"

希望能有所帮助 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接