所以我最近从bash
shell改为zsh
.然而,我在使用 pip 时遇到了一些麻烦python
。当我尝试时
pip list
ModuleNotFoundError: No module named 'pip._internal.main'
这样做which pip
给了我/home/marvin/.local/bin/pip
,所以按照我在我的中看到的一行bashrc
,我将其添加到zshrc
# adding packages installed via pip
export PATH="/home/marvin/.local/bin:$PATH"
我还重新启动了 shell 和机器来尝试一下。我仍然无法使用 pip 处理虚拟环境。有人可以指导我解决这个问题吗?
[编辑]
所以我做了
python3 -m pip install --user --upgrade pip
并使其在全球范围内发挥作用。不幸的是,我不得不重新创建我的虚拟环境。但问题是,在 shell 之间切换意味着重新创建环境。一定有更好的方法来做这件事
答案1
我看到了此错误消息,这是与我的$PATH
.
以下是一些故障排除步骤。
您可以使用 查看您的路径echo $PATH
。
which pip
并且which python
应该返回相同的位置。这些命令搜索您的目录以$PATH
查找包含可执行文件的第一个位置。
如果您使用pyenv
,which pip
和which python
将返回相同的“shims”目录,但这并不一定意味着可执行文件正在从同一目录运行。在这种情况下,请使用pyenv which pip
和pyenv which python
。
就我而言,~/.local/bin/
当我在 tmux 中运行时,我的 $PATH 有一个目录被添加到前面。~/.local/bin/
有pip
可执行文件但没有python
可执行文件。所以我尝试使用pyenv
Python 版本而不是~/.local/bin/pip
pip 版本。
编辑以澄清:
如果which pip
和which python
显示不同的路径,或者在 pyenv 的情况下,如果pyenv which pip
和pyenv which python
显示不同的路径,那么这可能是问题所在。
该解决方案将取决于您的环境,因此很难给出一个放之四海而皆准的解决方案。
也许你$PATH
有~/.local/bin
前 /usr/bin
并且~/.local/bin
有pip
可执行文件但没有python
可执行文件。所以你的计算机正在寻找,pip
但~/.local/bin
正在python
寻找/usr/bin
。在这种情况下,如果您不需要它,可以将其删除pip
。~/.local/bin
或者您可以将其更新为指向 pip 的符号链接/usr/bin
(假设您pip
那里有另一个可执行文件)。或者您可以添加一个符号链接~/.local/bin/python
to /usr/bin/python
。或者你可以更新你的$PATH
以便它搜索/usr/bin
前寻找~/.local/bin
。
解决方案取决于您的环境、Python 安装方式、要使用的版本等......
答案2
这种奇怪的现象可能是由一些 PATH 和 python/pip 版本差异引起的。
我建议在 bash 和 zsh 中检查这些命令的输出:
pip --version
python -m pip --version
pip2 --version
python2 -m pip --version
pip3 --version
python3 -m pip --version
作为@Kusalananda建议,您还需要检查初始化文件,例如.bashrc
.这取决于...有时set
在 zsh/bash 环境中区分输出更容易。这个差异可能很大(1k 行或更多),所以就像大海捞针一样。丢失或更改的变量(如 PATH )和 PYTHONNOUSERSITE、PYTHONPATH 以及以 PIP 开头或包含 PIP(或 PY?)shell 函数(如 pip() { ... } )的内容可能会计算在内。