Python 3无法导入第三方包

Sha*_*fax 4 python pyqt pyqt5

我有Python版本3.5.2并且我有pip3,所以我这样做了

sudo pip3 install pyqt5
Run Code Online (Sandbox Code Playgroud)

安装在 /usr/local/lib/python3.5/dist-packages 中

但是,当我输入 python 3 解释器并输入

import PyQt5
Run Code Online (Sandbox Code Playgroud)

它给我一个错误,它找不到名为 PyQt5 的模块。

所以我尝试通过以下方式将 /usr/local/lib/python3.5/dist-packages 路径添加到 PYTHONPATH

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.5/dist-packages
Run Code Online (Sandbox Code Playgroud)

但这并没有解决任何问题。如何让 Python 3.5.2 检测 PyQt5?

Sha*_*fax 5

感谢乔治,我慢慢找到了答案。问题的根源在于我从源而不是从 Ubuntu aptitude 包管理器安装了 Python 3.5.2 版本。

基本上,如果 Python 是从源安装的,那么,要查找第 3 方包,它会使用/usr/local/lib/python3.5/site-packages,但如果它是使用 来安装的apt,那么 Python 会查找/usr/local/lib/python3.5/dist-packages. 这是为了确保多个 Python 版本不会混淆。这是另一个解释的问题:dist-packages 和 site-packages 之间有什么区别?

解决方案:

我的 Python3 安装正在查看站点包并忽略 dist-packages,因此我添加了一个路径文件以使其也可以查看 dist-packages 内部。

cd /usr/local/lib/python3.5/site-packages
sudo vim dist-packages.pth
(Press i to go into insert mode inside Vim)
../dist-packages
:x (and Press Enter/Return)
Run Code Online (Sandbox Code Playgroud)

现在,当 Python 查看内部时/site-packages,它会找到dist-packages.pth哪个使其进入/dist-packages.

其他解决方案:

其他人遇到的问题与我完全相反,他们的Python安装只查看内部/dist-packages,因此他们使用与上面完全相同的方法,除了不是在内部创建dist-packages.pth文件(包含../dist-packages) ,而是在内部/site-packages创建site-packages.pth文件(包含.../site-packages/dist-packages

检查它是否有效:

检查这是否有效的简单方法是进入 Python 解释器并打印 sys.path。它现在应该包含两个包路径:

charliebrown@playground:/usr/local/lib/python3.5/site-packages$ python3
Python 3.5.2 (default, Nov 19 2016, 02:36:25) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys; print(sys.path)
['', '/usr/local/lib/python35.zip', '/usr/local/lib/python3.5',     '/usr/local/lib/python3.5/plat-linux', '/usr/local/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages']
Run Code Online (Sandbox Code Playgroud)

我希望有一天这可以帮助某人......