Shell在virtualenv中选择了错误的python可执行文件

时间:2018-12-18 10:23:06

标签: python bash virtualenv

我已将virtualenv添加到现有项目中,但无法理解奇迹:

dev:/www/development$ echo $PATH
/usr/local/bin:/usr/bin:/bin
dev:/www/development$ python -c "import sys; print(sys.executable)"
/usr/bin/python3
dev:/www/development$ source env/bin/activate
(env) dev:/www/development$ echo $PATH
/www/development/env/bin:/usr/local/bin:/usr/bin:/bin
(env) dev:/www/development$ python -c "import sys; print(sys.executable)"
/usr/bin/python3
(env) dev:/www/development$ /usr/bin/env python -c "import sys; print(sys.executable)"
/www/development/env/bin/python
(env) dev:/www/development$ which python
/www/development/env/bin/python
...
(env) dev:/www/development$ hash -r
(env) dev:/www/development$ python -c "import sys; print(sys.executable)"
/usr/bin/python3
(env) dev:/www/development$ hash
hash: hash table empty
(env) dev:/www/development$ type python
python is aliased to `/usr/bin/python3'
(env) dev:/www/development$ man python
(env) dev:/www/development$ hash
hits    command
   1    /usr/bin/man

在另一台具有相同配置的主机上,一切正常。我想念什么?为什么外壳程序选择错误的可执行文件?

更新(发现问题)

感谢@iBug向我指出type python命令。经过一番思考后,我注意到我在远古时代遗留下来的/etc/profile中有python的别名:

alias python='/usr/bin/python3'

1 个答案:

答案 0 :(得分:0)

如果您使用的是Bash(我想是因为您用Bash标记了您的问题),则可以这样做:

hash -r

然后使用python -c "import sys; print(sys.executable)"再试一次。


如果您想知道它在做什么,请尝试

type python

(注意:type是内置的shell,而which通常是独立程序)