Ist es möglich 2 Python Dateien in eine exe zu konvertieren, beim indirekten Ansprechen der Datei (kein import)?

Guten Tag erstmal,

ich versuche aktuell mir ein Python Chatbot für Twitch zu bauen. Dieser Funktioniert ansich schon ziemlich gut. Ich habe aber ein "Problem" bzw. ich hätte etwas gerne anders. Kurz zum Case. Das Projekt selbst besteht aus 2 verschiedenen Dateien. Zum einen eine script.py und eine gui.py. Wie die namen schon sagen, enthält die script.py das Script des eigentlichen Chatbots und die gui.py die dazugehörende Benutzeroberfläche. Die gui startet über ein button das script und gibt die Konsolenausgabe in einem TextEdit Feld (PyQt5) aus.

(Das wird über self.process.start("script.exe") ermöglicht)

Aktuell ist es so, dass ich das Script zuerst zu einer .exe packen muss und dann die gui diese Datei öffnet. Das fertige Programm besteht demnach aus 2 .exe Dateien. Das Problem ist dabei, dass die Zeit, bis das Script ausgeführt wird, relativ hoch ist und die eigentliche Projekt Größe. (Aktuell ca .100 mb).

Ich habe diesen Weg bisher gewählt, weil ein paar Kollegen diesen Bot auch gerne verwenden möchten. Die haben allerdings kein Python installiert, weshalb ein direktes ansprechen der script.py (z.B. self.process.start("python", "script.py"))nicht möglich ist.

Meines Wissens nach werden die notwendigen Bibliotheken für das script in diesem Fall bei der Konvertieren in eine exe nicht mitgenommen. Aktuell verwende ich für das einpacken in eine exe, Auto-py-to-exe.

Nun die Frage:

Gibt es eine Möglichkeit die script.py anzusprechen und sowohl die gui als auch die script.py in nur einer exe komplett auszuführen, ohne das Python installiert werden muss ? Hätte dazu jemand eine Idee?

Entschuldigt bitte ggf. Rechtschreibfehler und fehlende Satzzeichen :D

...zum Beitrag

.....

...zur Antwort

Globale Variablen können dir in größeren Projekten einen Strich durch die Rechnung machen wenn diese dann "falsch" oder nicht beabsichtigt überschrieben wird.

Dadurch kann es zu vielen Fehlern kommen.

Sinnvoll ist immer lokal zu arbeiten also kleiner Zugriffsradius. Sofern aber benötigt oder sinnvoller soviel wie benötigt.

Ich nutze Globals eigentlich nur wenn die variablen zum Beispiel bei pygame ein Surface ist und ich diesen ohne Probleme überall nutzen will. Eben gleiches gilt dann auch für die Parameter die bei laufzeit verändert werden sollen.

Wann und wie du diese nutzt musst du selber wissen und im Endeffekt gibt es da kein Richtig oder Falsch wenn es läuft. Bedenke aber wie bereits erwähnt bei größeren Projekten kann es dadurch Probleme geben.

...zur Antwort

wofür min max?

einfach alles miteinander addieren und für jede addition nen counter laufen lassen dann summe durch counter easy.

liste = [25,51]
sum = 0
for nr,add in enumerate(liste):
  sum += add
sum = sum / (nr+1)
print(sum)

müsste so jetzt funktionieren.

...zur Antwort

Programmiersprachen:

c#(geht), Python(gut),java(meh)

Skriptsprachen:

Batch/CMD(seit ü 10 Jahren damit am arbeiten),GML(sehr gut),Lua(selten benutzt aber lief immer glatt)

...zur Antwort

Schau dir mal an welchen Inhalt die variable trägt.

Der Inhalt von sys.argv[0] ist immer der Dateiname somit klar das es nicht funktioniert wenn du dem Programm Kauderwelsch übergibst welches nicht versteht.

Also versuche es mit sys.argv[1] und darauf überprüfe aber erst ob die variable da es eine Liste ist überhaupt 2 lang ist.

if len(sys.argv) < 2:
  sys.exit()

Überprüfe auch am besten nochmal ob es sich überhaupt um eine Zahl handelt.

...zur Antwort

Ja die gibt es:

auto-py-to-exe ist hier die Antwort und es wirklich sehr easy.

#cmd öffnen
pip install auto-py-to-exe 

falls es nicht geht hier ein Tutorial zu Thema pip:

https://www.youtube.com/watch?v=fA2Y99-AB8g

Danach nochmal falls es beim ersten mal nicht klappen sollte.

Darauf gibst du in CMD einfach nur "auto-py-to-exe" ein und stellst alles ein was du brauchst.

Dafür noch ein Tutorial: https://www.youtube.com/watch?v=HYHHzh7dju4

...zur Antwort

Geht jetzt nicht direkt ums Thema aber..

ich hätte ich den Code noch einiges verkürzt um ein wenig Übersichtlichkeit zu schaffen:

alle Konstanten in eine Reihe,

das zweite print weg und eine neue Zeile mit eine Escape Sequenz machen "\n" ansonsten so:

 f"""
Ich bin ein Text:
{IP}
{sys.argv}

Hier sparst du dir die Escape Sequenzen sofern du im Editor auch immer eine Zeile nach unten gehst.

"""

die imports in eine Reihe

sys.argv brauchst du eigentlich nicht extra in eine neue variable legen.

Und weil ich piki und Deutsch bin du hast "Phyton" geschrieben im ersten Bild auf dem ersten Task beim Ordner ist es sichtbar xD

...zur Antwort

List Index out of range bedeutet das der Platz in einer Liste nicht erreichbar ist.

Dementsprechend falls der User keine oder unzureichende Argumente angibt:

import sys
maxnr = 2
try:
    for nr, i in enumerate(sys.argv):
      chk = i #0 Ist IMMER der Dateipfad und Name
      if nr == maxnr:
        break
except:
    print("Unzureichende Argumente!")
    sys.exit()
...zur Antwort
import time
time.sleep(60)

time übernimmt alles in Sekunden dementsprechend 60 Sekunden Wartezeit und danach gehts dann weiter

...zur Antwort
Ganz einfach:

#Speichern
f = open("save.txt","a",encoding="utf-8")
for i in liste:
    f.write(str(i) + ":")
f.close()

#Laden
liste = []
with open("save.txt",encoding="utf-8") as file:
    for line in file:
        liste.append(line.split("\n")[0])

Man könnte daran noch ordentlich was machen aber es läuft.

...zur Antwort

Hier hast du etwas Auswahl:

Tic Tac Toe (Mathematische Siegerermittlung) sowie einen leichten Bot. Meiner war 23 Zeilen lang. Der erste von vor einem halben Jahr bald 100

Mau Mau

Youtube Downloader

Youtube Playlistdownloader

Speech Recognitition Bot

Dateien schreiben und lesen in einem Programm

Audio Aufnahme Programm

Bildskalierer

webblocker

pong

zahlen erraten

quiz game

...zur Antwort

Je nach dem was du willst...

Pixelart oder Realistisch?

Soll das Projekt nur einen Tag brauchen oder den Rest eines normalsterblichen Lebens?

Aber ich empfehle immer mit Pygame zu arbeiten.

Im Grunde ist der Code dafür recht einfach wenn wir jetzt annehmen wir wollen nur 16 Farben von 0-9 und von A-F und nur einen Stift sowie einen Radierer.

Genaueres könnte ich dir sagen wenn ich etwas mehr Infos habe.

...zur Antwort

auto-py-to-exe wäre eine Möglichkeit das ganze umzusetzen.

Damit wäre es so nicht mehr möglich den Code zu bearbeiten und du brauchst dann auch nicht mehr Python installiert haben um es auszuführen.

Im letzten Punkt kann ich mich allerdings auch irren! Ich bin auch grade zu faul meinen Dampfbetriebenen Laptop aus dem Schrott zu holen.

...zur Antwort
...zur Antwort
list = {'Maier', 'Bauer', 'Moser', 'Martin'}

Hier könnte es sein das du eine Liste erstellen wolltest?

Listen werden in [Eckigen Klammern gesetzt.] Du hast dort ein Dictonary erstellt.

for i in range(0, 3)

Dort fehlt ein Doppelpunkt. An der If Abfrage bei name auch.

name = L[i]

Hier würde ich simpel einen Counter hochzählen lassen. Wenn er sofern der Name mit "M" anfängt und erst am Ende die Ausgabe machen.

Ich habe das ganze hier einfach mal nachgebaut so wie ich es machen würde:

l = ['Maier', 'Bauer', 'Moser', 'Martin']
count = -1
rng = 4
for i in range(rng):
    print(i)
    name = l[i]
    if name[0] == 'M':
        count +=1
        


if count == i:


   print(f'Alle Namen fangen mit M an {count},{i}')
else:
    print(f'Nicht alle Namen fangen mit M an {count},{i}')

So müsste es funktionieren. Je nach Länge der Liste musst du nur den Wert "rng" anpassen

...zur Antwort

Ich kann dir sagen:

Ich arbeite selbst derzeit mit python und pygame und ja das kannst du tun und das wäre auch durchaus empfehlenswert um eine Sprache noch besser kennenzulernen. Von meiner Seite ich programmiere seit 2 Wochen davon 5 Tage an dem Spiel und naja hab einiges gelernt unter anderem:

Optimierung, Kollisionserkennung und naja in meinem Fall habe ich tatsächlich das erste mal wirklich Klassen und Funktionen nutzen müssen.

Es ist durchaus Sinnvoll ja wenn allerdings mehr als ein kleines Indigame 2D,3D drin sein soll dann musst du bei python ordentlich ackern.

Da kommt es ganz darauf an was möchtest du für ein Spiel machen?

Also ich zum Beispiel arbeite grade an einem Mix aus Space Invaders und Flappy Bird und dafür reichts auf jeden Fall.

Aber selbst hier zum Beispiel sitzt die Framerate dank Cpu Limitation und nicht genug Erfahrung im Keller:

Bild zum Beitrag

...zur Antwort