“哪个”无法找到通过pip(WSL)安装的软件包

时间:2019-10-06 23:43:22

标签: python python-3.x pip windows-subsystem-for-linux

我试图开始用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 Frozen”时出现的一样。这是因为它们是本地安装的吗?

(此外,如果有人在WSL中拥有Python和pip的经验,并且可以考虑如何配置我的Python环境,以避免此类问题,那将是非常有帮助的。)

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试:python -m site

(也许用python代替python3,等等)

您应该在下面的代码段中得到简短的输出,

从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 install版软件包,通常需要查看site-packages目录。

对于<package manager> install版软件包,通常需要在dist-packages目录中查找。

最后,which通常用于在$PATH环境变量上查找可执行文件(并且,至少对我来说,要求它们具有显示的可执行位在结果中。)

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

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

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