Python 3.5 Code in .exe Datei

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@xXSkyWalkerXx1: Da Du den Code nicht zeigst, kann man allgemein nur sagen, das man am besten immer explizit die Kodierung angibt, und sich nicht darauf verlässt was Python da ”magisch” errät, denn das kann unter anderem davon abhängen welche Kodierung(en) das System benutzt auf dem das läuft.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich hoffe der folgende Code meines Programms macht für dich vllt das Problem ersichtlich:

Code: Alles auswählen

    def generate(self):
        #try:
        session = requests.Session()
        session.post(login_url,data={'username':username,'password':passwort})
        session.post(source_url,data={'page_pwd':'<secret>'})
        get_login2  = session.get(source_url)
        soup = bs(get_login2.text,"html5lib")
        find_script = soup.find_all("p")
        
        for p in find_script:
            if "xXSkyWalkerXx1 GAMEPACK EDITION" in p.text:
                script = p.text
        
        w = open(os.environ['HOME']+'/Desktop/Fortnite_SkyGamePack.txt',"w") #.gpc !
        w.write("//include_lib: "+str(username[0:3])+str(username[-2])+str(username[-1])+"_library\n") #muss nicht verstanden werden ^^
        w.write(script)
        w.close()
...denn das ist eigentlich das, was das Problem ausmacht.
Mit der Funktion "print()" wird "script" allerdings normal ausgegeben,nur nicht geschrieben.
Vielleicht mittels ".encode("utf-8")" ?

Mal auch ein riesen Dank an die aktiven Mitglieder, die hier recht schnell antworten und hilfreich sind! :)

Grüße,
xXSkyWalkerXx1
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@xXSkyWalkerXx1: Wenn Du das UTF-8-kodiert speichern möchtest, solltest Du es auch entsprechend kodieren. Allerdings würde ich die Kodierung beim öffnen der Textdatei angeben.

Pfade setzt man mit `os.path.join()` zusammen und nicht mit ``+``.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Super, danke! Hatte bereits vorher gefunden, das man "encoding[etc.]" verwenden muss, habs auch bei "open" versucht, aber muss irgendwas falsch gemacht haben - nun funktioniert's! :)
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ein vorweg, Py2exe habe ich noch nie verwendet. Ich verwende immer den PyInstaller.

Ich nutze zwar selten Windows, weiß aber, dass ca. seit Python 3.5 der Interpreter nicht mehr im Pfad sein muss/sollte.
Die haben den Installer überarbeitet. Wo hast du Python 3.5 für Windows eigentlich her? Ich habe gerade nach dem Installer gesucht
und musste feststellen, dass die nur noch den Source Code für diese Version vertreiben.

Du kannst jedenfalls zu Python 3.7.2 auf dem Windows-PC updaten.


Egal ob wie der Interpreter jetzt installiert wird (Systemweit in C:\Programme oder als User-Anwendung in %localappdata%\Programs\Python)
das Tool py.exe findet ihn.

Wichtig ist nur, dass bei der Installation mit angegeben wird, dass der Launcher Systemweit installiert werden soll.
Ob man Python zum Pfad hinzufügen soll oder nicht, streiten sich die Geister. Ich mache das schon lange nicht mehr.
Installiert man es als Anwender, meckern manche Module rum, dass sie nicht im Systempfad liegen.

Code: Alles auswählen

py -m pip install PyInstaller --upgrade
echo print('Hello World') > test_program.py
py -m PyInstaller -F test_program.py
dist\test_program.exe
Hier und dort knallt es mal, wenn man zu viele Module installiert hat. Enum34 wird z.B. durch irgendeine Abhängigkeit installiert, sorgt aber für Probleme beim PyInstaller, da seit 3.5 oder später enum.IntEnum iterierbar ist und bei Enum34 war das nicht der Fall.

Viel besser ist es noch, wenn du eine Virtuelle Umgebung einrichtest, in der nur die Module installiert werden, die deine Software benötigt.

Code: Alles auswählen

py -m venv env1
env1\Scripts\activate.bat
# dann steht ein (env1) im prompt
# alle Module werden dann in env1 installiert
# und nicht Global
# deine Abhängigkeiten installieren
# py -m pip install -r requirements.txt
py -m pip install PyInstaller --upgrade
echo print('Hello World') > test_program.py
py -m PyInstaller -F test_program.py
dist\test_program.exe
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich weiß, dass ich zu 3.7 updaten kann, aber ich habe auf meinem RasPi3 auch nur 3.5 und so kann ich wenigstens auf beiden Geräten programmieren, ohne auf dem anderen Gerät vllt was überarbeiten zu müssen, wegen möglichen Unterschieden beider Versionen.

Naja, also ich habe es gerade mit "Auto_Py_To_Exe" geschafft, nach einigen Anläufen. ^^
Aber wenn ich die Anwendung starten möchte (mittels doppel-klick auf die Anwendung) wird mir mein Programm nicht angezeigt, obwohl "Auto_Py_To_Exe" keine Warnung für mögliche Probleme oder so angab.
Woran liegt das?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@xXSkyWalkerXx1: wie oft soll man Dir noch sagen, dass wenn Du keine Informationen lieferst, Du keine Antwort bekommen kannst. Woher soll irgendjemand wissen, was Du gemacht hast und was dann nicht so funktioniert, wie Du Dir das vielleicht denkst? Source-Code, Einstellungen, EXE-Datei hier posten, vielleicht tut sich das ja jemand an, nach dann nach dem Fehler zu suchen.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ja, wollte ja auch eigentlich die Datei hier hochladen, aber hier gibt's ja keine Möglichkeit eine Datei anzuhängen.
Aber dann ist mir ja DropBox eingefallen: <link kommt gleich>
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@xXSkyWalkerXx1: Was passiert wenn Du die Anwendung nicht per Doppelklick startest, sondern über die Konsole? Werden da Fehlermeldungen ausgegeben?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Also, hier erstmal der Link: https://www.dropbox.com/sh/mbwy91v4xyl1 ... xI5ca?dl=0
Hab Gefühl, dass "Py_2_Exe" manchmal Macken hat, weshalb es gerade zur Verspätung kam.

Zu deiner Frage: es öffnet dann nur erneut die Konsole, im neuen Fenster, mehr nicht, aber der zeigt auch nichts weiter in dieser.


PS. Beim Download kann es sein, dass der AntiVirus anspringt, das ist normal und angeblich bei jeder .exe Datei , erzeugt durch Py_2_Exe.
GuardDog

Hi,

wie wäre es damit: Du lädst die neuste Python-Version (oder eine deiner Wahl) herunter. Bei der Installation achtest du darauf dass "add Python 3.x to PATH" und "Disable PATH length limit" (<- Am ende der Installation) angehakt sind. Dann probier nochmal "pip install pyinstaller". Wenn pyinstaller installiert ist, gehe mit 'cd Pfad\zur\Datei' zur Datei und führe dann "pyinstaller namedesprogramms.py" aus.

Grüße
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

GuardDog hat geschrieben: Sonntag 30. Dezember 2018, 17:48 Dann probier nochmal "pip install pyinstaller".
Dann aber besser mit py -m pip install pyinstaller machen, damit die neue Version auch wirklich benutzt wird. Alternativ alle älteren Python-Versionen vorher runterschmeißen.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

xXSkyWalkerXx1 hat geschrieben: Sonntag 30. Dezember 2018, 13:26 Ich weiß, dass ich zu 3.7 updaten kann, aber ich habe auf meinem RasPi3 auch nur 3.5 und so kann ich wenigstens auf beiden Geräten programmieren, ohne auf dem anderen Gerät vllt was überarbeiten zu müssen, wegen möglichen Unterschieden beider Versionen.
  • du darfst async und await nicht mehr als Namen verwenden
  • du darfst einen Generator nicht mit StopIteration beenden, statdessen return verwenden
Viel mehr inkompatible Änderungen fallen mir momentan nicht ein. Du kannst jetzt fast überall in der stdlib Path-Objekte verwenden.
Vorher musste man den Pfad immer mit der Funktion str in Strings umwandeln, was etwas komisch im Code aussah.

Wenn du Python 3.7.2 auf dem Raspberry Pi verwenden willst, hast du verschiedene Möglichkeiten:
Wenn man selbst kompiliert kann das 30 Minuten oder länger dauern. Die Geschwindigkeit der SD-Karte ist ausschlaggebend.
So kannst du dann auch die neuste Python-Version auf deinem Raspberry Pi verwenden. Alle gängigen Bibliotheken sind kompatibel. (bis auf Tensorflow)
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Okay, also ich habe folgendes herausgefunden:
- wenn ich ein konsolenbasiertes Programm umwandel funktioniert es - .exe Datei startet Konsole, etc.
- eine UI (nicht konsolenbasiert) funktioniert widerrum nicht - es wird kein UI angezeigt (in dem Falle wurde Tkinter verwendet).
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was passiert, wenn du die Anwendung von der Konsole aus startest? Bekommst du dann eine Fehlermeldung? Denn grundsaetzlich geht so etwas.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ja, vergessen mit dazu zu schreiben:
Beim Start von der Konsole aus passiert auch nichts, die Datei wird geladen - dieses Ladekreis Symbol wird angezeigt, dann verschwindet es und nichts weiter passiert.
Nirgends eine (Fehler)Meldung oder sonst was.
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

In der Windowskonsole gestartete Programme führen zu einem Ladekreissymbol? Bekommst Du denn den Prompt zurück nachdem „nichts“ passiert?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Hoppla, tut mir leid, war mit den Gedanken teils bei der Ausführung mittels Mausklicks, ich korrigier mich:

Start über Mausklick: Das Ladekreissymbol wird angezeigt und verschwindet kurz darauf wieder - danach passiert scheinbar nichts weiter...
Start über Konsole: Ich gebe "start [Pfad des Prog.]" in die Konsole ein, Cursor wird auf neue Zeile gesetzt, also es führt das Prog. aus, aber das UI wird trotzdem nicht angezeigt.

Ich werde mal die .py Datei erneut umwandeln lassen, aber als Konsolenbasiert und werde noch eine print - Funtkion schnell einfügen, um zu sehen, ob das wenigstens funktioniert, denn eine reine Konsolenanwendung funktioniert komischerweise.
UPDATE: In der Konsole wird der Text (selbstgewählter) zwar angezeigt, aber die Konsole selbst verschwindet nach kurzer Zeit wieder. Allerdings finde ich im Taskmanager ein Abbildname "pythonw.exe" - mein Programm vllt?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Shit, keiner 'ne Idee? :D
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@xXSkyWalkerXx1: Du hast irgendeine Abhängigkeit nicht mit in Deine exe gepackt. Da Du aber bisher noch nicht geschrieben hast, mit welcher Konfiguration Du das erstellt hast, kann man Dir nicht helfen. Erster Schritt ist, das Ding mit python.exe statt mit pythonw.exe zu packen und in der Konsole zu starten, dass man die Fehlermeldung sieht.
Antworten