在Mac OS X上创建Python3的虚拟环境遇到问题

4

我在为Python 3创建的虚拟环境virtualenv中遇到了一个奇怪的问题。我按照通常的步骤进行了操作:

$ virtualenv --python=/opt/local/bin/python3.3 .py3
$ source .py3/bin/activate

我遇到的问题是当我调用命令 python --version 时,它仍然报告 2.7.5 版本,即使路径看起来已经正确设置了。我的 virtualenv 被创建在路径 /Users/barry.flinn/projects/.py3/bin 中,当我运行 which python 命令时,得到这些结果:
$ which python
/Users/barry.flinn/projects/.py3/bin/python

bin文件夹包含以下Python可执行文件:

lrwxr-xr-x   1 barry.flinn  obfuscated\Domain Users     9 Sep 23 19:39 python -> python3.3
lrwxr-xr-x   1 barry.flinn  obfuscated\Domain Users     9 Sep 23 19:39 python3 -> python3.3
-rwxr-xr-x   1 barry.flinn  obfuscated\Domain Users  9100 Sep 23 19:39 python3.3

显然,调用python应该给我Python 3.3,但它似乎仍然会恢复到系统Python 2.7.5。 当virtualenv处于活动状态时,我的$PATH是:

 /Users/barry.flinn/projects/.py3/bin:/usr/local/mysql/bin:/opt/local/lib/postgresql92/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/go/bin:/usr/local/munki

既然所有的内容看起来都是正确的,我对这里发生了什么感到困惑。

更新:

这个报告是正确的:

$ env python --version
Python 3.3.2

对我来说,这有点令人困惑,更进一步的解释如下:

你是否为 python 定义了别名? - bogatron
该死,原来还有一个我不知道的别名~/.bashrc。感谢你的建议。 - flinnb
1个回答

2

如果您在shell中定义了python解释器的别名,它将覆盖虚拟环境所选的python。例如:

user@x790:~/temp$ alias python=/usr/bin/python
user@x790:~/temp$ python --version
Python 2.7.4
user@x790:~/temp$ virtualenv --python=/usr/bin/python3 foo
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in foo/bin/python3
Also creating executable in foo/bin/python
Installing distribute.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................done.
Installing pip................done.
user@x790:~/temp$ . foo/bin/activate
(foo)user@x790:~/temp$ python --version
Python 2.7.4

请注意,报告的Python版本为2.7.4,即使选择了python3用于虚拟环境。使用env命令绕过别名:
(foo)user@x790:~/temp$ env python --version
Python 3.3.1

最后,您可以通过暂时禁用Python别名来解决此问题,或永久取消定义它:
(foo)user@x790:~/temp$ \python --version
Python 3.3.1
(foo)user@x790:~/temp$ unalias python
(foo)user@x790:~/temp$ python --version
Python 3.3.1

@bogatron,你能再解释一下吗?我还不知道怎么处理它。当我尝试运行virtualenv --python /Library/Frameworks/Python.framework/Versions/3.3/Python three_py时,它没有在当前目录下创建一个名为 three_py 的新虚拟环境,而是激活了其中一个虚拟环境。 - andilabs
看起来你缺少了一个“=”号。应该是 virtualenv --python=/Library/Frameworks/Python.framework/Versions/3.3/Python three_py。至于你语句中的实际路径,我不知道它是否正确(我无法确定它指向可执行文件还是目录)。 - bogatron

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