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。我$PATHvirtualenv活动时间是:

 /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

对我来说,这有点令人费解。

4

1 回答 1

2

如果您为python解释器定义了 shell 别名,它将覆盖为您的 virtualenv 选择的 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,即使为 virtualenv 选择了 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
于 2013-09-24T13:52:18.573 回答