2016-10-12 2 views
1

私は私のpythonプロジェクトのための.exeを生成しようとしています。生成された.exeを開くとエラーが表示されます。これは、私の含まれているモジュールwordcloudが通常、そのソースコードのすぐ隣にあるファイルを開こうとしているからです。cx_freezeに必要なモジュールに非pythonファイルを含める?

モジュールは次のようになります(C:/python/Lib/site-packages/wordcloud)。

__init__.py 
__pycache__/ 
color_from_image.py 
DroidSansMono.ttf 
query_integral_image.pyd 
stopwords 
wordcloud.py 
wordcloud_cli.py 

C:/.../my-application/builds/0.1/my-app/my-app.exe/wordcloudに見られるような)に生成cx_freeze exeファイル内のモジュールは、次のようになります。

color_from_image.pyc 
query_integral_image.pyc 
wordcloud.pyc 
__init__.pyc 

あなたはそれを知らなかった場合は、cx_freezeは、.exeファイル自体の内部世代のすべてのモジュールを含んでいますerated .exeは、実行可能ファイルでもアーカイブでもあります。

このgeneratec exe/archiveでは、元のソース内にあるstopwordsファイルを追加したいと思います。これは可能ですか?

この質問とcx_freezeのinclude_filesオプションの大きな違いは、ファイルが結果のフォルダにはならず、結果の.exeファイル内で、wordcloud依存のすぐ隣にあるはずです。

編集:私はinclude_filesをパスとして.exeを使用しようとしましたが、期待通りに動作しません。

error: build\exe.win32-3.3\my-app.exe: Cannot create a file when that file already exists

答えて

0

これはinclude_zipオプションを使用することにより可能です。 setup.pyで

:必要なモジュールがファイルを読むためにopen('.../archived-file.exe/wordcloud/stopwords')を使用しているので、これはまだopenは、アーカイブからの読み込みをサポートしていません、問題を解決するまで終了していないことを

import sys 
from cx_Freeze import setup, Executable 

# GUI applications require a different base on Windows (the default is for a 
# console application). 
base = None 
if sys.platform == "win32": 
    base = "Win32GUI" 

zip_includes = [ 
    (r'C:\Python33\Lib\site-packages\wordcloud\stopwords', 'wordcloud/stopwords'), 
    (r'C:\Python33\Lib\site-packages\wordcloud\DroidSansMono.ttf', 'wordcloud/DroidSansMono.ttf') 
] 

setup( name = "my-app", 
     version = "0.1", 
     description = "my-app description", 
     options = {"build_exe": {"zip_includes": zip_includes}}, 
     executables = [Executable("entry.py", base=base)]) 

あまりにも悪いですファイル。

+0

zipファイルについては、便利です。https://docs.python.org/3/library/zipfile.html – shuttle87

+0

@ shuttle87 'open'を呼び出すコードは私のものではありません。依存関係を自分自身で作成するか、ビルド中にパッチを適用する:/ – Azeirah

関連する問題