【问题标题】:cx_Freeze - how do I convert multiple files into the build foldercx_Freeze - 如何将多个文件转换为构建文件夹
【发布时间】:2017-08-18 06:57:28
【问题描述】:

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

我想将其作为两个 exe 文件,在 1 个构建文件夹中使用 subprocess.call() 启动第二个文件,但我不知道该怎么做。

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

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__'

有什么想法吗?

【问题讨论】:

    标签: python cx-freeze


    【解决方案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,您只是复制了程序的一部分。

    【讨论】:

    • 这个Post's 回答提到了它。
    【解决方案2】:

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

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

    【讨论】:

    • 你不需要。您只需要确保使用相同的脚本编译所有希望包含在一个构建文件夹中的 python 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2020-06-09
    • 2022-11-10
    • 2010-10-31
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多