Py2exe und Selen - IOError: [Errno 2] Keine solche Datei oder kein Verzeichnis: '\\ dist \\ main.exe \\ selen \\ webdriver \\ firefox \\ webdriver_prefs.json'

8

Ich habe eine einfache Anwendung geschrieben, die Selen verwendet, um durch Seiten zu nagivieren und ihren Quellcode herunterzuladen. Jetzt möchte ich meine Anwendung Windows-ausführbar machen.

Meine setup.py -Datei:

%Vor%

Mein Programm ( main.py ) (mit setup.py file) befindet sich in C:\Documents and Settings\student\Desktop . Py2exe erstellt meine exe in C:\Documents and Settings\student\Desktop\dist .

Ich habe sowohl webdriver.xpi als auch webdriver_prefs.json Dateien nach C:\Documents and Settings\student\Desktop\dist\selenium\webdriver\firefox\ kopiert, aber ich erhalte den Fehler beim Versuch, meine Anwendung zu starten:

%Vor%

Wie löst man das?

Tatsächlich hat es mit solch einer setup.py Datei funktioniert:

%Vor%

Aber das Problem ist, ich muss SINGLE ausführbare Datei erstellen.

    
mirx 16.10.2015, 14:47
quelle

4 Antworten

2

Haben Sie versucht, diese Antwort für die " bundle_files = 1 "Probleme? Es half mir, dieses spezifische Problem zu lösen.

    
toti08 12.11.2015 12:58
quelle
2

TL; DR - Bitte schau dir dieses Tool an, das ich gebaut habe: Ссылка

Darf ich vorschlagen, PyInstaller anstelle von py2exe oder irgendetwas anderes zu verwenden, da PyInstaller eine viel bessere Arbeit in Bezug auf die Bündelung einer einzelnen ausführbaren Datei leistet. Ich bin zu 90% der Zeit in Windows (keine Beschwerden hier) mit meiner Python - Programmierung - PyInstaller ist eine viel bessere Option als py2exe (zumindest für mich - ich habe eine Menge von Windows - Compilern in die Vergangenheit mit unterschiedlichem Erfolg). Vielleicht können auch andere Leute, die Probleme bei der Zusammenstellung haben, von dieser Methode profitieren.

PyInstaller Voraussetzungen:

  1. Installiere PyInstaller von: Ссылка
  2. Nach der PyInstaller-Installation - bestätigen Sie, dass sich "pyi-makespec.exe" und "pyi-build.exe" im Verzeichnis "C: \ Python ## \ Scripts" auf Ihrem Computer befinden
  3. Downloade meine PyInstaller-Assitance-Tools - PAT (es sind nur zwei Batch-Dateien und eine ausführbare Datei mit der Quell-Python-Datei der ausführbaren Datei - für den Paranoiden) ... Die Dateien sind oben aufgelistet :

    • Create_Single_Executable_with_NO_CONSOLE.bat
    • Create_Single_Executable_with_CONSOLE.bat
    • pyi-fixspec.exe
    • pyi-fixpec.py (optional - dies ist die Quelldatei für die ausführbare Datei - wird nicht benötigt)
  4. Platzieren Sie die executable Datei "pyi-fixspec.exe" im vorherigen "Scripts" Ordner, den ich oben erwähnt habe ... das macht die Kompilierung auf lange Sicht viel einfacher!

Lass es jetzt funktionieren ... ein paar leichte Codeänderungen in deiner Python-Anwendung

  1. Ich verwende eine Standardfunktion, die auf den Speicherort von Anwendungen / Skripts verweist , die meine Python-Anwendung verwenden muss, um während der Ausführung / des Betriebs zu arbeiten. Diese Funktion funktioniert sowohl, wenn die App ein eigenständiges Python-Skript ist, als auch, wenn sie vollständig über pyinstaller kompiliert wurde.

    Hier ist der Code, den ich benutze ...

    %Vor%

    und hier ist meine App, die es benutzt ....

    %Vor%

    Das bedeutet, dass die App / Dateien in Bezug auf die Verzeichnisstruktur ungefähr so ​​aussehen:

    %Vor%

    Bitte beachten Sie, dass die Daten / Dateien / Ordner, die ich für meine App bündle, unterhalb der Hauptdatei liegen, die ich kompilieren werde ... Der "_MEIPASS" Teil in der Funktion lässt pyinstaller wissen, dass er funktioniert eine kompilierte Anwendung ... SEHR WICHTIGER HINWEIS: Bitte verwenden Sie die Funktion "resource_path" , da die Anwendung "pyi-fixspec.exe" nach dieser Phrase / Funktion sucht, während sie die Python-Anwendungspfadanalyse analysiert / korrigiert

  2. Wechseln Sie in das Verzeichnis mit den beiden oben genannten Batch-Dateien und geben Sie Folgendes ein:

    Option 1 %Vor%

    Die ausführbare Ausgabedatei führt beim Doppelklicken auf

    zu einer GUI-App Option 2 %Vor%

    Die ausführbare Ausgabedatei führt beim Doppelklicken zu einer WINDOWS CONSOLE-App - erwartet NUR die Befehlszeilenaktivität

  3. Ihre neue ausführbare Datei mit einer einzigen Datei ist fertig! Suchen Sie an dieser Stelle nach

    %Vor%

    Wenn Sie die ursprüngliche Python-Datei, die gerade kompiliert wurde, bearbeiten / ändern, löschen Sie bitte den Ordner / Inhalt von ** \ NameOfPythonFile ** vor dem nächsten Start der Kompilierung (Sie möchten die historischen / Artefaktdateien löschen) )

  4. Kaffeepause - Wenn Sie ICONS zur ausführbaren Datei (und anderen Elementen) bearbeiten / hinzufügen möchten, sehen Sie sich bitte die generierte ".spec" -Datei und die PyInstaller-Dokumentation für Konfigurationsdetails an. Sie müssen es nur noch einmal in der Windows-Konsole starten:

    %Vor%
Doug E Fresh 04.01.2016 07:29
quelle
2

Mit Nuitka können Sie eine einzelne ausführbare Datei erstellen, die nativ ausgeführt wird. Er konvertiert den Python-Code in C ++ und kompiliert ihn dann.

Ссылка

Es erfordert jedoch, dass Sie einen Compiler installiert haben. Die entsprechenden Versionen von Microsoft Visual C ++ oder GCC. Microsoft hat den "Microsoft Visual C ++ Compiler für Python 2.7" veröffentlicht, den Sie hier unter Ссылка .

Ein nettes Installationsprogramm von MinGW GCC für Windows finden Sie unter Ссылка mit detaillierten Anweisungen, einschließlich der, welche MSVCRTXX.dll-Version verlinkt werden soll mit welcher Version von Python.

Dinge, die Sie durch diese Methode der ausführbaren Generierung gewinnen:

  • Dies erzeugt Maschinencode, so dass es schwieriger, aber nicht unmöglich ist, einen Reverse-Engineering durchzuführen. Einfach Py2exe oder PyInstaller zu verwenden, die für ihre beabsichtigte Verwendung großartig sind, verpackt nur den bytekompilierten Python-Code, der leicht dekompiliert werden kann ( Ссылка ), in eine zip-angehängte ausführbare Datei.
  • Ihre Anwendung wird auch ein bisschen schneller. Ich schrieb einen Blog-Post über diese Art von Sache bei (ich bekomme kein Geld von Click-Throughs oder Anzeigen).

    Ссылка .

Jared Fields 08.01.2016 15:46
quelle
2

Das Problem, das Sie haben, ist, dass Selen versucht, eine Datei auf eine Weise zu öffnen, die nicht direkt mit py2exe kompatibel ist.

Wie Sie hier in Zeile 63 sehen können, Selen muss eine Einstellungsdatei öffnen, die normalerweise mit dem Paket geliefert wird. Es verwendet die Variable __file__ , um es zu finden, die nicht gut mit py2exe funktioniert . Wie Sie herausgefunden haben, ist es möglich, dies auch durch Verpacken zu umgehen die Prefs-Datei in Ihrer Distribution . Das ist jetzt mehr als eine Datei.

Das py2exe-Wiki hat dann ein Rezept, um NSIS zu verwenden , das eine selbstextrahierende ausführbare Datei von Ihrem vollständigen erstellen wird Verteilung.

    
Peter Brittain 08.01.2016 23:36
quelle

Tags und Links