2016-07-27 37 views
2

Ich bin mit tkinter und pyinstaller/py2exe (entweder wäre einer in Ordnung), um eine ausführbare Datei als eine einzelne Datei aus meinem Python-Skript zu erstellen. Ich kann die ausführbare Datei erstellen, und sie wird wie gewünscht ausgeführt, wenn die Option bundle mit der Option py2exe oder -F nicht mit pyinstaller verwendet wird. Ich verwende Python-Skripte von Drittanbietern innerhalb meines Codes mit os.system() und kann diese Skripte einfach in das Verzeichnis 'dist' einfügen, nachdem es erstellt wurde, damit es funktioniert. Der Befehl hat mehrere Parameter: Eingabedatei, Ausgabedatei, Anzahl der Threads..etc, also bin ich mir nicht sicher, wie ich das mit meinem Import in meinen Code einfügen kann. Leider ist dies unter Windows, daher können einige Kollegen die GUI verwenden und möchten die einzelne ausführbare Datei verteilen.PyInstaller/Py2exe - os.system Aufruf mit Drittanbieter-Skripte in einer einzigen Datei Kompilierung

** EDIT: ** Ich kann es in einer einzigen ausführbaren Datei bündeln und die Skripte zusammen mit der exe bereitstellen. Das Problem ist jedoch immer noch mit os.system("python script.py -1 inputfile -n numbthreads -o outputfile.."), wenn die Skripte von Drittanbietern in meinem Code ausgeführt werden. Ich ließ einen Kollegen die ausführbare Datei mit den mitgelieferten Skripten testen, aber an dieser Stelle muss Python installiert sein, was inakzeptabel ist, da es mehrere Benutzer geben wird.

Antwort

0

Nach ein paar Tagen einiger Tests konnte ich herausfinden, wie man dieses Problem umgehen kann. Anstelle von os.system verwende ich subprocess.call("script.py arg1 arg2 ..., shell=True) für jedes Skript, das ich ausführen muss. Außerdem habe ich chmod +x (in Linux) verwendet, bevor ich die Skripte an Windows übertrage, um sicherzustellen, dass sie ausführbar sind (jemand kann mir hoffentlich sagen, ob das wirklich nötig war). Dann, ohne Python installieren zu müssen, konnte ein Kollege das Programm ausführen, nachdem ich es mit pyInstaller als einzelne Datei kompiliert hatte. Ich war auch in der Lage, das Gleiche mit Blast Executables zu tun (wo der Benutzer blast nicht lokal installieren musste - wenn die exe auch die Verteilung des Skripts begleitete). Dadurch wurde vermieden, bipython ncbiblastncommandline und die Installation aufrufen zu müssen.