2013-08-04 9 views
7

Ich habe PyQt5 global auf meinem win7-System (Python 3.3) installiert, mit dem von der offiziellen Riverbank-Website zur Verfügung gestellten Installationsprogramm.Wie installiere ich PyQt5 auf einem neuen virtualenv und arbeite an einem IDLE

Dann habe ich eine neue –no-site-packages virtualenv erstellt, wo die einzigen Dinge, die ich nach der Eingabe pip list aufgeführt, sind Pip (1.4) und setuptools (0.9.7).

Das Problem ist jetzt, dass ich dort auch die komplette PyQt5 installieren muss und dies scheint unmöglich mit dem Pip-Tool.

Sowohl pip install sip als auch pip install PyQt5 innerhalb der virtuellen Umgebung geben Fehler zurück.

Kann jemand eine Anleitung geben, was genau ich tun soll?

Ich mag auch in der Lage sein, mit diesem PyQt5 zu arbeiten (des neuen virtualenv) aus dem Innern eines IDLE, so ich die tcl Ordner aus der globalen Installation meiner Python zur Lage meiner virtuellen Umgebung kopiert und auch eine Verknüpfung Targeting erstellt: {location of my virtual enviroment}\Scripts\pythonw.exe C:\Python33\Lib\idlelib\idle.pyw so konnte ich die virtuelle IDLE und nicht die globale öffnen. (Hoffe, dass ich nichts tun habe es falsch ... Korrektur vielleicht bitte.)

+1

'gibt Fehler zurück 'Denken Sie nicht, uns zu sagen, welche Fehler genau helfen würden, Ihr Problem zu lösen? –

+0

Ich bin nicht OP, aber ich bekomme einen Fehler 'FileNotFoundError: [Errno 2] Keine solche Datei oder Verzeichnis: '/ home/naught101/.virtualenvs/virtualenv-3/build/sip/setup.py'', wenn 'pip install sip' ausgeführt wird. Es gibt keine weiteren Beschwerden. – naught101

Antwort

10

Both "pip install sip" and "pip install PyQt5" inside the virtual enviroment are returning errors.

Wenn die Fehler, die Sie sich beziehen, sind:

Could not find any downloads that satisfy the requirement [pyqt5|sip]

und

No distributions at all found for [pyqt5|sip]

Dann sollte diese answer Licht darauf werfen. Grundsätzlich stellt PyPI nur einen Link zur Homepage und/oder zur Quelle zur Verfügung - kein herunterladbares Paket oder Ei. Hier finden Sie die Links zu und SIP PyPI-Seiten. Ich weiß, dass es merkwürdig erscheint, dass ein Paketmanager keine Pakete bereitstellt, aber so ist es.

Sie müssen sip und pyqt5 aus der Quelle herunterladen, kompilieren und installieren, in Ihrem virtualenv. Ich wünschte, ich könnte Details liefern, aber ich arbeite gerade selbst daran.

+2

Sollte in der Lage sein, mit 'pip' die Raddateien zu installieren, die auf der [PyQt5] (https://www.riverbankcomputing.com/software/pyqt/download5) Download-Seite zum Download verfügbar sind. –

0

Ich sah das gleiche Problem bei der Installation von PyQt5 und SIP. Die Lösung für die Lösung dieses Problems für PyQt4 wie auf Is it possible to add PyQt4/PySide packages on a Virtualenv sandbox? angegeben, funktionierte für mich.

Ich manuell Symlinks zu den PyQt5 und sip.so aus dem Verzeichnis virtualenv/site-packages erstellt. Eine hässliche Lösung, aber die Dinge funktionieren.

3

Wie ich meine PyQt5 bekam, Python33 Windows7x64 innerhalb eines virtualenv Arbeits:

Zum einen stellen Sie sicher, 64 oder 32-Bit-Versionen von alles abgestimmt haben. Ich entwickle auf einer 64bit-Plattform und verwende 64bit-Versionen. Ich habe das nicht komplett mit 32 Bit getestet. Bitte lesen Sie gründlich.

  • Installierte Python33 x64 mit Windows-Installer-Binärdateien.
  • Installierte PyQt5 x64 von Riverbank mit dem MSI-Installer in die Standard Python33. PIP wird nicht funktionieren.
  • Erstellen Sie ein virtualenv mit Python33 als Basis, keine Website-Pakete.
  • Kopieren Sie den PyQt5-Ordner von Python33/Lib/site-packages/in Ihre virtualenv/Lib/site-Pakete.
  • LÖSCHEN SIE NICHT den PyQT5-Ordner!

Stellen Sie sicher, PyQt5 arbeitet an der Basis Python33 installieren:

from PyQt5 import QtCore, QtGui, QtWidgets 

erstellen Hauptfenster und starten Sie es. Beim Testen mit PyQt4-Code wurden einige Klassen ausgetauscht. (Innerhalb QtGui und QtWidgets zum Beispiel)

von PyQt5 Import QtGui, QtWidgets, QtCore

class Main(QtWidgets.QMainWindow): 

def __init__(self): 
    print("Main __init__ fired") 
    QtWidgets.QMainWindow.__init__(self) 

    #Setup the UI 
    print("Setting up UI") 
    self.ui = Ui_MainWindow() 
    self.ui.setupUi(self) 

def main(): 
    print("fired main()") 

    #Setup the main application object 
    app = QtWidgets.QApplication(sys.argv) 

    window = Main() 
    window.show() 

    sys.exit(app.exec_()) 

#Run GUI 
if __name__ == "__main__": 
    main() 

Wenn Sie diesen Fehler erhalten "..failed zu starten, konnte nicht die Qt-Plattform-Plugin finden oder laden" Fenster.“ (oder ähnliches), müssen Sie DirectX AKTUALISIEREN. tun Sie dies durch Microsoft.

Wenn Sie ganz sicher PyQt5 sind innerhalb von Windows arbeitet, dann weiter.

  • Aktivieren Sie Ihr virtualenv, wo Sie den PyQt5-Ordner kopiert
  • Stellen Sie sicher, PyQt5 kann aus Ihrem virtualenv importiert werden. Je nachdem, welche IDE Sie verwenden, müssen Sie möglicherweise Pfade manipulieren. Führen Sie einen Import in Ihrer virtualenv

    von PyQt5 Import QtCore, QtGui, QtWidgets

  • Versuchen Sie, die gleiche Anwendung wieder aus dem Inneren dieser virtualenv

OH NO laufen! Ein weiterer Fehler mit dlls! Was gibt? Die Pfade zu den QT-DLL-Bibliotheken sind innerhalb des Virtualenv falsch. Es passiert sogar, wenn Sie PyQt5 anweisen, sich direkt auf Ihrem virtualenv zu installieren. Sie MÜSSEN vor dem Erstellen des QApplication-Objekts die Pfade zu libraryPaths hinzufügen. Hier ist eine Lösung (Ersetzen Venv mit Ihre virtualenv Weg):

def main(): 
    print("fired main()") 

    #ADD THE FOLLOWING BEFORE CREATING A QApplication() 
    QtCore.QCoreApplication.setLibraryPaths(['C:/venv/Lib/site-packages/PyQt5/plugins']) 

    #Ensure path was added and correct 
    print(QtCore.QCoreApplication.libraryPaths()) 

    #Setup the main application object 
    app = QtWidgets.QApplication(sys.argv) 

    #See what the paths were 
    print(app.libraryPaths()) 

    window = Main() 
    window.show() 

    sys.exit(app.exec_()) 

Jetzt ist der Code sollte von allen in Ihrem virtualenv laufen. Sie können das PyQt5-Verzeichnis aus Ihrer Basisinstallation löschen oder es an einen anderen Ort verschieben, wenn Sie es in Zukunft benötigen.

Es gibt höchstwahrscheinlich eine Möglichkeit, den Pfad relativ zu formatieren, aber dies könnte zu einem Problem mit Cx-Freeze führen. Apropos.

Jetzt sind Sie fertig und Sie gehen zu cx-Freeze Ihre PyQt5 App in eine nette exe. Du gehst es zu laufen und OH NEIN! mehr DLL-Probleme.

Sie können libEGL.dll manuell von site-packages/PyQt5 in den Stammverzeichnisordner Ihrer Anwendung kopieren oder die folgenden Zeilen zu Ihrem Setup hinzufügen.py-Datei für cx-freeze:

import sys 

from cx_Freeze import setup, Executable 

#ADD THIS MUST INCLUDE FOR Windows 7. 
include_files = [('c:/venv/Lib/site-packages/PyQt5/libEGL.dll', 'libEGL.dll')] 

setup(
    name="My App", 
    version="0.1", 
    description="PyQt5 App.", 

    #ADD THIS 
    options={'build_exe': {'include_files': include_files}}, 

    executables=[Executable("c:/venv/src/myApp_main.py", 
          base="Win32GUI", 
          targetName="MyApp.exe")]) 
1

Angenommen, Sie haben PyQt5 global installiert ist, gibt es einen Weg Sie Ihren virtualenv Zugang zu ihm, ohne --system-site-packages geben kann. Ein Paket namens vext macht es möglich. Es funktioniert auch mit anderen Paketen, aber in diesem Fall richten wir nur die PyQt5-Unterstützung ein.

Führen Sie den folgenden Befehl aus Ihrer virtualenv und Sie sollten gut gehen:

pip install vext.pyqt5 

den Status zu überprüfen, führen vext -l.

Running in virtualenv [enabled] 
pyqt5.vext 

Oder laufen vext -c pyqt5.vext: Sie sollten in etwa wie folgt sehen. Sie sollten etwa Folgendes sehen:

import sip: [success] 
import PyQt5: [success] 

Alternativ können Sie auch versuchen, PyQt5, z. python -c 'import PyQt5'.

+0

Dies ist die sauberste Methode. Auf Mac können Sie auch die Bibliotheken mit dem Virtualenv verlinken. – Akelian

Verwandte Themen