我已经为python 3.6创建了虚拟环境。并且我已经用apt-get安装了python3-pyqt5.qtwebkit包。这个包已经安装在global python3.5中并且可以正常工作,但是如果我尝试从venv python3.6中导入它,会出现导入错误...如何在我的虚拟环境中安装此软件包?或者,如果这是不可能的,我如何使用在我的virtualenv 3.6python中安装在3.5中的全局包。
使用global python3.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使用venv的python3.6运行
(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'发布于 2017-07-10 20:55:36
为了在虚拟环境中使用系统包,您必须在创建虚拟环境时使用--system-site-packages选项:
virtualenv --python=python3.6 --system-site-packages envPython3的venv中也提供了相同的开关。
更好的选择是(如果适用于您的情况)使用pip在您的虚拟环境中安装所有包。
发布于 2017-07-10 21:29:08
如果您查看包的内容(使用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安装/venv中的这些模块。
为此,您需要将PyQt5目录中的所有.so文件符号链接到venv,然后将cpython-35m-x86_64-linux-gnu更改为cpython-36m-x86_64-linux-gnu。与PyQt5需要的库一样,sip库也是如此。这只有在ABI在两个版本之间兼容的情况下才能起作用。
对上面提到的版本进行快速测试表明,它至少对简单的脚本有效,但我不能保证。
https://stackoverflow.com/questions/45012581
复制相似问题