我为python 3.6创建了虚拟环境。我已安装python3-pyqt5.qtwebkit
包apt-get
。该软件包已安装在全局python3.5及其工作,但如果我尝试从venv python3.6导入它有导入错误...如何在我的虚拟环境中安装此软件包?或者,如果这不可能,我怎么能在我的virtualenv 3.6 python中使用3.5中安装的全局包。
(virtualenv)
~/vcs-ss/sst master ✗ 5d ▴ ⚑ ✚ ◒
▶ python3.5 -c 'import PyQt5.QtWebKit; print(PyQt5.QtWebKit.__file__)'
/usr/lib/python3/dist-packages/PyQt5/QtWebKit.cpython-35m-x86_64-linux-gnu.so
(virtualenv)
~/vcs-ss/sst master ✗ 5d ▴ ⚑ ✚ ◒
▶ python3.6 test/e2e/browser.py
Traceback (most recent call last):
File "test/e2e/browser.py", line 8, in <module>
from PyQt5.QtWebKit import *
ModuleNotFoundError: No module named 'PyQt5.QtWebKit'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
from apport.packaging_impl import impl as packaging
File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 23, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Original exception was:
Traceback (most recent call last):
File "test/e2e/browser.py", line 8, in <module>
from PyQt5.QtWebKit import *
ModuleNotFoundError: No module named 'PyQt5.QtWebKit'
答案 0 :(得分:0)
要在虚拟环境中使用系统包,在创建虚拟环境时必须使用--system-site-packages
选项:
virtualenv --python=python3.6 --system-site-packages env
Python3&#39; venv
中提供了相同的开关。
使用pip
在您的虚拟环境中安装所有软件包(如果适用)是更好的选择。
答案 1 :(得分:0)
如果您查看包的内容(使用dpkg --listfiles python3-pyqt5.qtwebkit
),您可能会看到类似这样的内容:
/.
/usr
/usr/lib
/usr/lib/python3
/usr/lib/python3/dist-packages
/usr/lib/python3/dist-packages/PyQt5
/usr/lib/python3/dist-packages/PyQt5/QtWebKit.cpython-35m-x86_64-linux-gnu.so
/usr/lib/python3/dist-packages/PyQt5/QtWebKit.pyi
/usr/lib/python3/dist-packages/PyQt5/QtWebKitWidgets.cpython-35m-x86_64-linux-gnu.so
/usr/lib/python3/dist-packages/PyQt5/QtWebKitWidgets.pyi
/usr/share
/usr/share/doc
/usr/share/doc/python3-pyqt5.qtwebkit
/usr/share/doc/python3-pyqt5.qtwebkit/copyright
/usr/share/doc/python3-pyqt5.qtwebkit/changelog.Debian.gz
该软件包安装为特定python版本编译的二进制模块(在本例中为:cpython-35m),由于二进制名称不兼容,您将无法直接使用python3.6 installation / venv中的那些模块。 / p>
要实现这一点,您需要将.so
目录中的所有PyQt5
文件符号链接到您的venv,并将cpython-35m-x86_64-linux-gnu
更改为cpython-36m-x86_64-linux-gnu
。对于sip
库也是如此,因为PyQt5需要这些库。只有ABI在两个版本之间兼容时,这才有效。
使用上述版本进行快速测试表明它至少适用于简单的脚本,但我无法保证。