Shell 在 virtualenv 中选择了错误的 python 可执行文件
Shell selects wrong python executable in 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
在具有相同配置的另一台主机上,一切正常。我错过了什么?为什么 shell select 错误的可执行文件?
更新(发现问题)
感谢@iBug 指出 type python
命令。经过一番思考后,我注意到我在 /etc/profile
中有 python 的别名,这些别名是从某个古代遗留下来的:
alias python='/usr/bin/python3'
如果您使用的是 Bash(我想是这样,因为您用 Bash 标记了您的问题),这样做就可以了:
hash -r
然后用 python -c "import sys; print(sys.executable)"
再试一次。
如果您想知道它在做什么,请尝试
type python
(注意:type
是一个 shell 内置程序,而 which
通常是一个独立程序)
我在现有项目中添加了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
在具有相同配置的另一台主机上,一切正常。我错过了什么?为什么 shell select 错误的可执行文件?
更新(发现问题)
感谢@iBug 指出 type python
命令。经过一番思考后,我注意到我在 /etc/profile
中有 python 的别名,这些别名是从某个古代遗留下来的:
alias python='/usr/bin/python3'
如果您使用的是 Bash(我想是这样,因为您用 Bash 标记了您的问题),这样做就可以了:
hash -r
然后用 python -c "import sys; print(sys.executable)"
再试一次。
如果您想知道它在做什么,请尝试
type python
(注意:type
是一个 shell 内置程序,而 which
通常是一个独立程序)