PyInstaller 2.0 を使用して、py スクリプトを .exe としてバンドルしようとしています。スクリプトをバンドルすることはできますが、私のスクリプトでは、exe にバンドルする必要があるファイルを開く必要があります (移植可能です)。私はこれを行うのに問題があります..
私の.pyには、
filename = 'C:\path\to\my\file\doc.docx'
data = open(filename,'rb')
私は PyInstaller 2.0 を使用しており、これは私のコンピューターでは正常に動作しますが、exe を別のコンピューターに転送すると動作しません.. PyInstaller 2.0 はかなり新しいため、ドキュメントはほとんどなく、発行元のドキュメントはかなり「足りない」。
この問題に関する発行者の情報は次のとおりです。
--onefile ディストリビューションでは、データ ファイルは実行可能ファイル内にバンドルされ、実行時に C コードによって作業ディレクトリに抽出されます (ディレクトリ ツリーを再構築することもできます)。作業ディレクトリは、os.environ['_MEIPASS2'] で見つけるのが最適です。したがって、これらのファイルには次の方法でアクセスできます。
os.path.join(os.environ["_MEIPASS2"], relativename))
それは、初心者のプログラマーである私には本当に意味がありません..
出版社からの別の文書によると..
--onefile ディストリビューションでは、データ ファイルは実行可能ファイル内にバンドルされ、実行時に C コードによって作業ディレクトリに抽出されます (ディレクトリ ツリーを再構築することもできます)。作業ディレクトリは、sys._MEIPASS によって最適に検出されます。したがって、これらのファイルには次の方法でアクセスできます。
os.path.join(sys._MEIPASS, relativename))
私は os.environ["_MEIPASS2"] をかなり試しましたが、python は os.environment["_MEIPASS2"] を理解していないようです。私はこれを取り戻します:
>>> 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'
私もsys._MEIPASSで実験しました..ええ、Pythonは「モジュール」に属性「_MEIPASS」がありませんと応答します。
この時点で、頭が爆発しそうです.. PyInstaller の作成者の仕事には感謝していますが、彼らのドキュメントは私が今まで見た中で最悪です! 私のファイルをexeにバンドルするのを手伝ってくれる人が必要です。すべての .spec が PyInstaller の以前のバージョンと混同するため、PyInstaller 2.0+ を使用したいと思います。
ところで、私はPython 2.7.3でWin8 64ビットを使用しています
助けてください!