2017-07-10 4 views
1

Ich habe eine virtuelle Umgebung für Python 3.6 erstellt. Und ich habe installiert python3-pyqt5.qtwebkit Paket mit apt-get. Das Paket wurde in python3.5 installiert und funktioniert, aber wenn ich versuche, es von python3.6 zu importieren gibt es einen Importfehler ... Wie kann ich dieses Paket in meiner virtuellen Umgebung installieren? Oder wenn das nicht möglich ist, wie kann ich das in 3.5 installierte globale Paket in meinem virtualenv 3.6 Python verwenden.Wie importiere ich python3 lib in python3.6

Laufen mit globalen 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 

Laufen mit python3.6 von Venv

(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

Haben Sie versucht, es mit pip zu installieren? –

+0

Versuchen Sie 'sudo pip3 install pyqt5' in Ihrem vent. – BrightOne

+0

@BrightOne Ich habe dies bereits getan QtWebKit ist nicht in der Standard-qyqt5-Bibliothek (es ist nicht enthalten). – urosjarc

Antwort

0

Um Systempakete innerhalb einer virtuellen Umgebung zu verwenden, müssen Sie --system-site-packages Option verwenden, wenn die Erstellung virtuelles env:

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

Derselbe Schalter ist in Pytho verfügbar n3's venv.

Eine viel bessere Option ist (falls in Ihrem Fall anwendbar), alle Pakete in Ihrem virtuellen env unter Verwendung von pip zu installieren.

+0

Ich habe 'virtualenv -p python3.6 --distribute --system-site-packages venv' aber immer noch scheint es, dass es System-Site-Pakete von globalen 3.6 Python zu erkennen. – urosjarc

+0

Von Ihrer aktualisierten Frage, sieht es aus wie 'Python-apt' Paket fehlt. Versuchen Sie: 'apt-get install python-apt'. – randomir

+0

Ich habe bereits versuchen, dies ... – urosjarc

0

Wenn man sich den Inhalt des Pakets aussehen (mit dpkg --listfiles python3-pyqt5.qtwebkit) werden Sie wahrscheinlich so etwas wie dies sehen:

/. 
/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 

Das Paket für eine bestimmte Python-Version (in diesem Fall kompiliert Binärmodule installiert: CPython -35m), können Sie diese nicht direkt von python3.6 installation/venv wegen der inkompatiblen Binärnamen verwenden.

Dafür arbeiten Sie all .so Dateien im PyQt5 Verzeichnis auf Ihre Venv und dort cpython-35m-x86_64-linux-gnu-cpython-36m-x86_64-linux-gnu ändern Symlink bräuchten. Das Gleiche gilt für die sip Bibliotheken, da diese von PyQt5 benötigt werden. Und das funktioniert nur, wenn die ABI zwischen den beiden Versionen kompatibel ist.

Ein kurzer Test mit den oben genannten Versionen zeigt, dass es zumindest für einfache Skripte funktioniert, aber ich kann keine Garantie geben.

+0

'von PyQt5.QtWebKit importieren * ImportError: /usr/lib/x86_64-linux-gnu/libQt5Network.so.5: Symbol _Z15qIsEffectiveTLDRK7QString, Version Qt_5 nicht in Datei libQt5Core.so.5 mit Link-Zeit-Referenz definiert – urosjarc