我已经制作了一个使用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__'
有任何想法吗?
答案 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,你只是复制程序的一部分。