PyInstaller 2.0 fichier de regroupement en tant que --onefile
Je vais essayer de regrouper mes py script comme un .exe à l'aide de PyInstaller 2.0. Je suis en mesure d'intégrer le script, mais dans mon script, je besoin pour ouvrir un fichier qui devrait être fourni dans le fichier exe (si c'est portable). Je vais avoir du mal à faire cela..
Dans mon .py, j'ai
filename = 'C:\path\to\my\file\doc.docx'
data = open(filename,'rb')
- Je utiliser PyInstaller 2.0 et cela fonctionne très bien sur mon ordinateur, mais si je transfert le fichier exe d'un autre ordinateur, il n'est pas d'aller travailler.. PyInstaller 2.0 est assez nouveau, donc il y a très peu de documents sur elle, et l'éditeur de la documentation est assez "manquant."
Ici est l'éditeur d'info sur le sujet: (je ne pense pas que leur documentation est à jour, parce que dans le début, il dit d'utiliser les Configure.py, puis dans d'autres docs il est dit Configure.py n'est plus nécessaire dans la version 2.0)
Dans un --onfichier de distribution, les fichiers de données sont regroupés au sein de l'exécutable, puis extraite au moment de l'exécution dans le répertoire de travail par le code C (qui est également capable de reconstruire des arborescences de répertoires). Le répertoire de travail est le meilleur trouvé en os.environ['_MEIPASS2']. Ainsi, vous pouvez accéder à ces fichiers par le biais de:
os.path.join(os.environ["_MEIPASS2"], relativename))
Qui n'a pas vraiment de sens pour moi, un programmeur débutant..
Un autre document à partir de l'éditeur dit..
Dans un --onfichier de distribution, les fichiers de données sont regroupés au sein de l'exécutable, puis extraite au moment de l'exécution
dans le répertoire de travail par le code C (qui est également capable de reconstruire des arborescences de répertoires). Le répertoire de travail
est meilleur par sys._MEIPASS. Ainsi, vous pouvez accéder à ces fichiers par le biais de:
os.path.join(sys._MEIPASS, relativename))
J'ai expérimenté autour un peu avec os.environ["_MEIPASS2"] et python ne semble pas comprendre l'os.de l'environnement["_MEIPASS2"]. Je reçois ce retour:
>>> print os.environ["_MEIPASS2"]
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
print os.environ["_MEIPASS2"]
File "C:\Python27\lib\os.py", line 423, in __getitem__
return self.data[key.upper()]
KeyError: '_MEIPASS2'
J'ai également expérimenté avec sys._MEIPASS.. Ouais, python répond 'module' a pas d'attribut "_MEIPASS'.
À ce point, j'ai l'impression que ma tête est sur le point d'exploser.. j'apprécie PyInstaller auteurs pour leur travail, mais leur documentation est le pire que j'ai jamais vu! J'ai juste besoin de quelqu'un pour m'aider bundle mon fichier dans le fichier exe. Je tiens vraiment à utiliser PyInstaller 2.0+ depuis tous les .spec trucs me confond avec les versions précédentes de PyInstaller.
BTW, je suis sous Win8 64 bits avec python 2.7.3
S'IL VOUS PLAÎT AIDER!
source d'informationauteur user1914730
Vous devez vous connecter pour publier un commentaire.
OMG!
Cette PyInstaller vraiment me troublait un peu. Si mon post précédent sons un peu "alias ranty", désolé.. de toute façon, pour ceux qui cherchent à inclure un fichier dans un --onfichier PyInstaller package cela a fonctionné pour moi:
Inclure ceci dans votre .py script:
de crédit à quelqu'un dont le nom je ne me souviens pas.. (désolé il est tard et je suis épuisé!)
Alors, si vous êtes en utilisant PyInstaller2.0, cmd, à partir de la pyinstaller-2.0 dir, vous pouvez exécuter
Qui permettra de créer un myscriptsname.le fichier de spécification dans le pyinstaller-2.0 dir. Il permettra également de créer un fichier exe, mais qui ne fonctionne pas. Il sera mis à jour plus tard.
Maintenant le modifier .spec, et ajoutez les à la suite d'une.les données de la ligne (n'oubliez pas de données, pas de données). J'ai inclus un peu plus dans le .le fichier de spécification juste pour la référence.
Maintenant, de retour dans cmd, exécutez
Cette mise à jour de votre .exe dans le dossier /dist dir.
Peut-être il ya une meilleure façon, ou d'une belle façon, mais cela a fonctionné pour moi!