首页 > 解决方案 > “哪个”无法找到使用 pip (WSL) 安装的软件包

问题描述

我试图开始在 WSL 中编写 Python,但整个体验非常混乱。要安装软件包,我知道我想使用 pip3,但是任何 pip3 命令都会导致

Traceback (most recent call last): File "/usr/bin/pip3", line 9, in <module> from pip import main ImportError: cannot import name 'main'

我的解决方法是使用以下命令进行安装,该命令有效

python3 -mpip install --user somePackageName

我现在真正的困惑来自该which命令未找到上述命令安装的软件包这一事实。但是,我知道当我运行“python3 -mpip freeze”时它们就在那里。这是因为它们是本地安装的吗?

(另外,如果有人在 WSL 中使用 Python 和 pip 并且可以权衡如何配置我的 Python 环境,以避免这些类型的问题,那将非常有帮助。)

谢谢!

标签: pythonpython-3.xpipwindows-subsystem-for-linux

解决方案


尝试:python -m site

(也许替换pythonpython3等)

您应该使用以下块获得简短的输出,

从 Windows:

sys.path = [
    '<your current working directory>',
    'C:\\Python38a2\\python38.zip',
    'C:\\Python38a2\\DLLs',
    'C:\\Python38a2\\lib',
    'C:\\Python38a2',
    'C:\\Python38a2\\lib\\site-packages',
]

来自 WSL:

sys.path = [
    '<your current working directory>',
    '/usr/lib/python37.zip',
    '/usr/lib/python3.7',
    '/usr/lib/python3.7/lib-dynload',
    '/home/<username>/.local/lib/python3.7/site-packages',
    '/usr/local/lib/python3.7/dist-packages',
    '/usr/lib/python3/dist-packages',
]

这就是您要查找已安装软件包的地方。

这里的顺序是导入优先级(较早的条目“胜过”后面的条目)

对于pip installed 包,您通常需要查看site-packages目录。

对于<package manager> installed 包,您通常需要在dist-packages目录中查找。

最后,which通常用于在您的环境变量中查找可执行文件$PATH(并且,至少对我而言,要求它们设置了可执行位以显示在结果中)。

在这里,您正在寻找可以由 Python 导入的不同的模块或包。换句话说,您的$PYTHONPATH.

这是两种不同类型的“路径”。

在您的解释器中,$PYTHONPATH映射到sys.path$PATH映射到os.environ['PATH'].


推荐阅读