Pyenv-virtualenv中的Pip安装到大苏尔的系统中



我已经安装并使用Pyenv一段时间了,利用Pyenv Virtualenv插件创建venvs,并根据插件文档通过包含.python-version自动激活。

但是,它似乎并不总是像预期的那样工作。最近升级OSX到Big Sur.

Pip似乎是在全局安装软件包,而不是在venv:

pyenv versions
system
2.7.17
3.8.5
3.9.5
* 3.9.5/envs/project_venv (set by /Volumes/path_to_my_project/.python-version)
fulfill

到目前为止,一切顺利。

pyenv which pip
/Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/bin/pip

如我所料。

这就是我困惑的地方:

venv外:

$ pyenv which pip
/Users/mikekilmer/.pyenv/versions/3.8.5/bin/pip
$ pip list -v
Package           Version   Location                                                      Installer
----------------- --------- ------------------------------------------------------------- ---------
# all the global pip packages...
defusedxml        0.7.1     /usr/local/lib/python3.9/site-packages                        pip
# No Django, which is good
idna              2.10      /usr/local/lib/python3.9/site-packages                        pip

venv:

$ pip install django
# installation output...
$ pip list -v
# abridged
Django            3.2.5     /usr/local/lib/python3.9/site-packages                        pip
## That's not supposed to be in the global packages!!!

当然Django也在全局pip list中。

等等…

看这个:

$ /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/bin/pip install django
# installation output...
$ /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/bin/pip list -v
asgiref    3.4.1   /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
Django     3.2.5   /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
pip        21.1.1  /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
pytz       2021.1  /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
setuptools 56.0.0  /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
sqlparse   0.4.1   /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip

现在它被安装到正确的位置。

但这不是它应该工作的方式,不是吗?似乎不知何故,pyenv认为正在使用venvpip,但事实并非如此。

当我运行which pyenv时,它返回这个函数:

pyenv () {
local command
command="${1:-}"
if [ "$#" -gt 0 ]
then
shift
fi
case "$command" in
(activate | deactivate | rehash | shell) eval "$(pyenv "sh-$command" "$@")" ;;
(*) command pyenv "$command" "$@" ;;
esac
}

我没有在pyenv存储库中找到该代码,我正在使用最新的主(pyenv 2.0.3)通过Homebrew。

见解吗?

更新似乎pip是符号链接到/usr/local/bin/pip3:

$ which pip
pip: aliased to /usr/local/bin/pip3

pip3正确指向pyenv位置时:

$ which pip3
/Users/mikekilmer/.pyenv/shims/pip3

$PATH开头如下:

/var/folders/62/38l28z6j12s9lqp6nnhmrlhc0000gn/T//zsh-501/bin:/usr/local/Cellar/pyenv-virtualenv/1.1.5/shims:/Users/mikekilmer/.pyenv/shims:/Users/mikekilmer/.pyenv/bin

第一个目录是空的,似乎是达尔文缓存目录的一部分:

$ getconf DARWIN_USER_CACHE_DIR
/var/folders/62/38l28z6j12s9lqp6nnhmrlhc0000gn/C/

我不确定它是如何被附加到我的PATH(由zsh?)或者如果它可能以某种方式使shell认为它应该在其他地方找到pip而不是pyenv

我在某些时候也同样感到困惑。原来我用不同的方法安装/升级python和pip (brew, easy_install, curl, sudo…)。这就是为什么我的路变得一团糟。


删除所有pip并重新安装它有帮助。

当我运行which pyenv时,它返回这个函数:

pyenv () {
local command
command="${1:-}"
if [ "$#" -gt 0 ]
then
shift
fi
case "$command" in
(activate | deactivate | rehash | shell) eval "$(pyenv "sh-$command" "$@")" ;;
(*) command pyenv "$command" "$@" ;;
esac
}

您可以将pyenv添加到~/的PATH中。ZSHRC或~/。Zshenv,以便得到正确的路径。

echo 'export PATH=$HOME/.pyenv/bin:$PATH' >> ~/.zshenv

我希望有一个更完整的解释,但是安装pip3解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新