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: 2564
Registriert: Samstag 2. Juni 2018, 10:21

Samstag 29. Dezember 2018, 17:24

@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 tribal myths are true, for a given value of 'true'.” – Terry Pratchett, The Last Continent
xXSkyWalkerXx1
User
Beiträge: 207
Registriert: Mittwoch 27. Juni 2018, 17:39

Samstag 29. Dezember 2018, 19:57

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: 2564
Registriert: Samstag 2. Juni 2018, 10:21

Samstag 29. Dezember 2018, 20:21

@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 tribal myths are true, for a given value of 'true'.” – Terry Pratchett, The Last Continent
xXSkyWalkerXx1
User
Beiträge: 207
Registriert: Mittwoch 27. Juni 2018, 17:39

Samstag 29. Dezember 2018, 21:55

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: 287
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Sonntag 30. Dezember 2018, 11:50

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: 207
Registriert: Mittwoch 27. Juni 2018, 17:39

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.

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: 9396
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 30. Dezember 2018, 14:05

@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: 207
Registriert: Mittwoch 27. Juni 2018, 17:39

Sonntag 30. Dezember 2018, 14:12

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: 2564
Registriert: Samstag 2. Juni 2018, 10:21

Sonntag 30. Dezember 2018, 14:32

@xXSkyWalkerXx1: Was passiert wenn Du die Anwendung nicht per Doppelklick startest, sondern über die Konsole? Werden da Fehlermeldungen ausgegeben?
“All tribal myths are true, for a given value of 'true'.” – Terry Pratchett, The Last Continent
xXSkyWalkerXx1
User
Beiträge: 207
Registriert: Mittwoch 27. Juni 2018, 17:39

Sonntag 30. Dezember 2018, 14:50

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
User
Beiträge: 47
Registriert: Mittwoch 5. April 2017, 20:53
Kontaktdaten:

Sonntag 30. Dezember 2018, 17:48

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: 5747
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sonntag 30. Dezember 2018, 18:10

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: 287
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Montag 31. Dezember 2018, 10:28

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: 207
Registriert: Mittwoch 27. Juni 2018, 17:39

Mittwoch 2. Januar 2019, 16:21

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: 4853
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 2. Januar 2019, 16:24

Was passiert, wenn du die Anwendung von der Konsole aus startest? Bekommst du dann eine Fehlermeldung? Denn grundsaetzlich geht so etwas.
Antworten