[英]pip and python referring to different interpreters
我知道“multiple-versions-of-python-mess”并不是什么新鲜事,但我的问题更具体。 我正在学习如何使用 venv(和 pyenv 等),但遇到了一个奇怪的情况。
我安装了许多不同版本的 python(就像一个版本一样)。 我使用其中之一,3.9,来创建一个 venv:
$ /usr/local/Cellar/python@3.9/3.9.12_1/bin/python3 -m venv ./venvpractice
然后我激活它:
cd venvpractice
$ source bin/activate
这是“麻烦”开始的地方:
(venvpractice) $ which python
~/venvpractice/bin/python
(venvpractice) $ which python3
python3: aliased to /usr/local/bin/python3
(venvpractice) $ which pip
pip: aliased to /usr/local/bin/pip3
(venvpractice) $ which pip3
~/venvpractice/bin/pip3
您不希望pip
和python
匹配(即来自同一个地方),并且pip3
和python3
也匹配吗? 为什么都乱七八糟的?
我知道这不是最重要的。 我应该小心并确保我调用了正确的方法,例如,当我执行pip3 freeze > requirements.txt
时。 但我只想了解幕后发生的事情。 我觉得事情仍然一团糟。 pyenv
/.zshrc
我也用它做了一些实验……
请帮忙?!
venv
不会为你unalias
; 如果你有别名,你的 shell 在venv
的东西甚至有机会之前解释那些。
我的简单建议是从 shell 的启动文件中删除这些别名,或者至少暂时以交互unalias
它们的别名。
如果您需要别名,请尝试类似
alias python3='env python3'
这应该在虚拟环境中和虚拟环境中做正确的事情(前提是您的PATH
适度理智,并且您有/usr/local/bin/python3
指向/usr/local/bin/python
)。
(尽管在其他新闻中,别名不如 shell 函数。对于这个简单的案例,mmmmmaybe 可以使用别名。)
稍微复杂一点的 function 可能看起来像
python () {
case ${VIRTUAL_ENV-} in
'') /usr/local/bin/python "$@" ;;
*) command python "$@";;
esac
}
但最终,如果你无论如何都在使用pyenv
,可能只是让开它,让它为你处理这些事情; 它做得很好而且透明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.