【问题标题】:How to import python3 lib in python3.6如何在python3.6中导入python3库
【发布时间】:2017-12-14 05:16:11
【问题描述】:

我为 python 3.6 创建了虚拟环境。我已经用apt-get 安装了python3-pyqt5.qtwebkit 包。该软件包已安装在全局 python3.5 中并且可以正常工作,但是如果我尝试从 venv python3.6 导入它,则会出现导入错误...如何在我的虚拟环境中安装这个软件包?或者,如果这不可能,我如何在我的 virtualenv 3.6 python 中使用安装在 3.5 中的全局包。

使用全局 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'

【问题讨论】:

  • 你试过用pip安装吗?
  • 在你的 venv 中尝试sudo pip3 install pyqt5
  • @BrightOne 我已经完成了这个 QtWebKit 不在标准 qyqt5 库中(不包括在内)。
  • @Professor_Joykill 大声笑是的。

标签: python linux


【解决方案1】:

为了在虚拟环境中使用系统包,你必须在创建虚拟环境时使用--system-site-packages选项:

virtualenv --python=python3.6 --system-site-packages env

Python3 的venv 中提供了相同的开关。

更好的选择是(如果适用于您的情况)使用pip 在您的虚拟环境中安装所有包。

【讨论】:

  • 我有virtualenv -p python3.6 --distribute --system-site-packages venv,但它似乎仍然可以识别来自全局 3.6 python 的系统站点包。
  • 从您更新的问题来看,python-apt 包似乎丢失了。试试看:apt-get install python-apt.
  • 你试过apt-get remove --purge python-apt然后重新安装了吗?喜欢这个answer (and comments)建议。
【解决方案2】:

如果您查看包的内容(使用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-gnusip 库也一样,因为 PyQt5 需要这些库。这只有在 ABI 在两个版本之间兼容时才有效。

对上述版本的快速测试表明它至少适用于简单的脚本,但我不能提供任何保证。

【讨论】:

  • from PyQt5.QtWebKit import * ImportError: /usr/lib/x86_64-linux-gnu/libQt5Network.so.5: symbol _Z15qIsEffectiveTLDRK7QString, version Qt_5 not defined in file libQt5Core.so.5 with link time reference
猜你喜欢
  • 2021-05-11
  • 2018-03-18
  • 2017-08-03
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2019-06-29
  • 2023-03-11
相关资源
最近更新 更多