cx_Freeze - 如何将多个文件转换为构建文件夹

时间:2017-07-27 20:33:26

标签: python cx-freeze

我已经制作了一个使用os.startfile()启动另一个python程序的程序。

我希望将此作为两个exe文件,使用subprocess.call()代替在1个构建文件夹中启动第二个,但我不知道如何执行此操作。

我尝试为两者创建一个安装文件,创建2个构建文件夹,然后将其中一个exe文件复制到另一个构建文件夹中,但得到了这个:

Traceback (most recent call last): 
File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 12, 
in <module> __import__(name + "__init__") 
ImportError: No module named 'menu_record__init__'

有任何想法吗?

2 个答案:

答案 0 :(得分:1)

cx_Freeze创建的程序不是单个exe文件。这是在build文件夹下创建的整个文件夹。如果您只是复制exe文件,则只复制程序的一部分。

不要试图在同一个文件夹中放置两个exe文件,而应该做的是有两个文件夹,每个文件夹都是一个完整的cx_Freeze程序。您的子进程调用应该调用../program2/program2.exe而不是./program2.exe

答案 1 :(得分:1)

可以使用以下方法在一个构建中包含两个exe:

import sys
from cx_Freeze import setup, Executable

options = {
'build_exe': {'path': sys.path + ['modules']}
}

executables = [
    Executable('script_1.py'),
    Executable('script_2.py')]

setup(
    name='two exe in one folder',
    version='0.1',
    description='Two exe in a single build folder',
    options=options,
    executables=executables)

您可能需要进一步编辑此脚本,但它应该在同一个构建文件夹中生成两个exe。

如果你去你的python位置(python.exe所在的位置)并导航到 Lib \ site-packages \ cx_Freeze \ samples \ advanced 位置,您应该在其中找到名为setup.py的脚本,看看它,您的答案应该在那里。

Cx_Freeze中的exe具有依赖性。通过复制exe,你只是复制程序的一部分。