在cx_freeze所需的模块中包含非python文件?

时间:2016-10-12 01:49:38

标签: python-3.x cx-freeze python-module

我正在尝试为我的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

1 个答案:

答案 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不支持从存档文件中读取。