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.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Abend Programmierer,

ich weiß, ihr hört das oft hier, aber kann man eine python datei in eine standalone, ausführbare Datei umwandeln - z.B. in eine .exe Datei?
Ich finde vieles dazu, aber nichts hilft bzw. bin ich auch ratlos wie ich module für Python installieren kann, da ich keinen Bash-Terminal
habe und auch keine Ahnung habe wie ich den auf Windows zum Laufen bekomme.

Mein Ziel ist es ein Programm (UI und später GUI) mit anderen teilen zu können, die das Programm starten können, indem sie einfach auf's
Icon des Programmes klicken und dies sofort gestartet wird - ohne sichtbare Konsole & ohne den Python Interpreter zu benötigen.

Ist klar wie es gemeint ist?
Und wie, wenn möglich, wandel ich eine .py Datei in eine .exe Datei um?
...zur Verfügung steht ein Windows Rechner und ein Raspberry Pi3 , auf denen ich umwandeln könnte.

Grüße,
xXSkyWalkerXx1
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du schon ausprobiert? Dein letzter Versuch, wenn ich mich recht erinnere, war es, zu versuchen auf einem RaspPi ein Windowsprogramm zu erzeugen, was verständlicherweise nicht so einfach ist. Hast Du das selbe inzwischen unter Windows probiert?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Hey Sirius!

Ja, genau dabei bin ich ja - zu versuchen auf mein Windows Rechner die .py Datei in eine .exe umzuwandeln. ^^
Ich habe Py2Exe für Python 3 gedownloadet, nur scheints so, dass ich da PyCharm brauche, außerdem habe ich das Problem, dass ich nicht weiß, wie ich ohne
dem Bash-Terminal die nötigen Module (wie BS4) downloaden und installieren kann.
Außerdem hatte ich es mal mit einem anderen Programm vesucht, vor paar Wochen, glaube es war PyInstaller (ich weiß es nicht mehr) und da hat es garnicht erst mein Python3 Client oder so finden können.

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

@xXSkyWalkerXx1: PyCharm sollte man für die Umwandlung nicht benötigen und eine Bash auch nicht, Windows hat ja die cmd.exe und/oder eine PowerShell. ``pip`` ist das ziemlich egal aus welcher Shell heraus es gestartet wird.
„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

wie kann ich denn mittels cmd.exe ein pip-download starten, z.B. "pip install pyinstaller" ?

pip wird seit python 3.xx standartmäßig mit intsalliert, auch bei windows, aber bei mir geht kein pip trotz python 3.5
Benutzeravatar
__blackjack__
User
Beiträge: 13071
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn Python im %PATH% liegt, dann mit ``python -m pip install pyinstaller``.
„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

Was meinst mit " %PATH% " ?
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du das unbekannte Wort mal in eine Suchmaschine gekippt?
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

xXSkyWalkerXx1 hat geschrieben: Freitag 28. Dezember 2018, 22:13 Was meinst mit " %PATH% " ?
Ist das dein Ernst? Kann es sein, dass du trotz 166 Beiträgen einfach zu dämlich oder nicht willens bist, dein Hirn (oder Google) einzuschalten? Nur eine rein Happy-Hypo-Stehtische Vermutung...
__deets__ hat geschrieben: Freitag 28. Dezember 2018, 22:48 Hast du das unbekannte Wort mal in eine Suchmaschine gekippt?
Kippen find ich super. Nicht so sehr die zum Rauchen, wohl aber das zum Saufen. :mrgreen:
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

achsooo, ja...jetzt kappiert. ^^

Okay, habe jetzt in meiner Variable "PSModulePath" als Werte "%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules\;C:\Python35;C:\Python35\Scripts" stehen, trotzdem funktioniert weder pip noch python.
Und falls jemand, warum auch immer, nach dem Pfad von Python fragen: C:\Users\Philipp\AppData\Local\Programs\Python\Python35
Grr, grieg die Kriese...
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Und warum steht dann DER Pfad nicht als Wert in Deiner PATH-Variable?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Weil der im Video es anders gemacht hat. 😁
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

PSModulePath wird nur von der PowerShell genutzt. Besser ist es - wie bereits geschrieben - den %PATH% zu verwenden. Den kriegst du auch schön grafisch aufbereitet zum Bearbeiten, wenn du unten bei der Windows-Suche einfach mal das Wort "path" eingibst...
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ja, danke @snafu , habs bereits.
Und riesen dank an @__blackjack__ , funktioniert übrigens alles! :)
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Bekomme gerade in Error, beim Versuch etwas aus dem Internet zu parsen und in eine Datei zu schreiben.
Wenn ich das auf meinem RasPi3 (Linux) versuche funktioniert es ohne Fehler, doch unter Windows erhalte
ich folgenden Fehler, mit den ich als Neuling irgendwie rein nichts anfangen kann bzw. verstehe:

Code: Alles auswählen

  File "C:\Users\Philipp\AppData\Local\Programs\Python\Python35\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 2-98: character maps to <undefined>
Benutzeravatar
__blackjack__
User
Beiträge: 13071
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: 13071
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: 1017
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
Antworten