pip 和 python 指的是不同的解释器
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
时。但我只想了解幕后发生的事情。我觉得事情仍然一团糟。 /.zshrc
中有如此多的版本、别名、符号链接和 PATH 变量...然后 pyenv
我也尝试了一下...
请帮忙?!
venv
不会 unalias
给你任何东西;如果你有别名,你的 shell 会在 venv
有机会之前解释那些。
我的简单建议是从 shell 的启动文件中删除这些别名,或者至少暂时 unalias
以交互方式删除它们。
如果你需要一个别名,试试
alias python3='env python3'
这应该在虚拟环境中和虚拟环境中做正确的事情(前提是您的 PATH
适度清醒,并且您有 /usr/local/bin/python3
指向 /usr/local/bin/python
)。
(尽管在其他新闻中,别名不如 shell 函数。对于这种简单的情况,mmmmmaybe 可以使用别名。)
稍微复杂一点的函数可能看起来像
python () {
case ${VIRTUAL_ENV-} in
'') /usr/local/bin/python "$@" ;;
*) command python "$@";;
esac
}
但最终,如果您无论如何都在使用 pyenv
,可能只是让开它,让它为您处理这些事情;它做得很好而且透明。
我知道“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
时。但我只想了解幕后发生的事情。我觉得事情仍然一团糟。 /.zshrc
中有如此多的版本、别名、符号链接和 PATH 变量...然后 pyenv
我也尝试了一下...
请帮忙?!
venv
不会 unalias
给你任何东西;如果你有别名,你的 shell 会在 venv
有机会之前解释那些。
我的简单建议是从 shell 的启动文件中删除这些别名,或者至少暂时 unalias
以交互方式删除它们。
如果你需要一个别名,试试
alias python3='env python3'
这应该在虚拟环境中和虚拟环境中做正确的事情(前提是您的 PATH
适度清醒,并且您有 /usr/local/bin/python3
指向 /usr/local/bin/python
)。
(尽管在其他新闻中,别名不如 shell 函数。对于这种简单的情况,mmmmmaybe 可以使用别名。)
稍微复杂一点的函数可能看起来像
python () {
case ${VIRTUAL_ENV-} in
'') /usr/local/bin/python "$@" ;;
*) command python "$@";;
esac
}
但最终,如果您无论如何都在使用 pyenv
,可能只是让开它,让它为您处理这些事情;它做得很好而且透明。