我正在尝试为我的python项目生成.exe。打开生成的.exe会给我一个错误,这是因为我所包含的模块wordcloud
正在尝试打开通常紧邻其源代码的文件
模块本身看起来像这样(在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
生成的cx_freeze exe中的模块如下所示(如C:/.../my-application/builds/0.1/my-app/my-app.exe/wordcloud
中所示):
color_from_image.pyc
query_integral_image.pyc
wordcloud.pyc
__init__.pyc
如果您不知道,cx_freeze包含.exe本身内的所有模块,生成的.exe既是可执行文件,也是存档。
在这个generatec exe / archive中,我想添加在原始源中找到的stopwords
文件。这可能吗?
这个问题和cx_freeze的include_files
选项之间的最大区别在于文件不应该在结果文件夹中结束,而是在结果.exe文件中,就在wordcloud依赖项旁边!
编辑:我尝试使用带有.exe的include_files
作为路径,但正如我预期的那样,这不起作用。
error: build\exe.win32-3.3\my-app.exe: Cannot create a file when that file already exists
答案 0 :(得分:0)
可以使用include_zip
选项。
在setup.py中:
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)])
太糟糕了,由于所需模块使用open('.../archived-file.exe/wordcloud/stopwords')
来读取文件,因此仍然没有最终解决问题,open
不支持从存档文件中读取。