首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python3.6中导入python3库

如何在python3.6中导入python3库
EN

Stack Overflow用户
提问于 2017-07-10 20:50:53
回答 2查看 2.5K关注 0票数 2

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

使用global python3.5运行

代码语言:javascript
复制
(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运行

代码语言:javascript
复制
(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'
EN

回答 2

Stack Overflow用户

发布于 2017-07-10 20:55:36

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

代码语言:javascript
复制
virtualenv --python=python3.6 --system-site-packages env

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

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

票数 1
EN

Stack Overflow用户

发布于 2017-07-10 21:29:08

如果您查看包的内容(使用dpkg --listfiles python3-pyqt5.qtwebkit),您可能会看到如下所示:

代码语言:javascript
复制
/.
/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在两个版本之间兼容的情况下才能起作用。

对上面提到的版本进行快速测试表明,它至少对简单的脚本有效,但我不能保证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45012581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档