使用cx_freeze编译Python代码后更改可执行文件名称
我一直在尝试让我用Python写的一个小程序能在任何运行Windows的电脑上独立运行,所以我试着用cx_freeze和py2exe来实现这个目标。py2exe运行得很好,但我更喜欢使用cx_freeze,因为它在兼容性方面更好。
不过,cx_freeze的问题是在编译代码和所有依赖项之后,我无法更改生成的可执行文件的名称(而这在py2exe中是可以做到的)。
比如说,我有一个简单的hello.py
脚本:
print ("Hello World! ")
raw_input ("Press any key to exit. \n")
而我的cxfreeze_setup.py
文件是直接从他们网站上复制过来的,用于调试,内容大致如下:
import sys
from cx_Freeze import setup, Executable
setup( name = "hello",
version = "0.1",
description = "My simple hello world!!",
executables = [Executable("hello.py")])
当我在命令提示符中运行python cxfreeze_setup.py build
来构建独立程序时,一切都很顺利,生成的可执行文件和它的依赖项都在通常的build
文件夹里。
如果我不对生成的hello.exe
进行任何名称更改,直接运行它,一切也都能正常工作!
但是,如果我把hello.exe
改成hey.exe
,然后尝试运行hey.exe
,我就会遇到以下错误:
Traceback (most recent call last):
File "c:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26 in <module>
code = importer.get_code(moduleName)
zipimport.ZipImportError: can't find module 'hey__main__'
如果我把.exe
的名称改成hi.exe
,那么错误信息基本不变,只是最后一行变成了can't find module 'hi__main__'
。
最后,我想知道,使用cx_freeze时,我是否被迫在编译后不能更改可执行文件的名称,如果不是的话,我需要对我的hello.py
或cxfreeze_setup.py
脚本做什么修改,才能在编译后自由修改可执行文件的名称,这一点在py2exe中是完全可以做到的。
提前感谢任何帮助。
3 个回答
在用Python写的版本中,驼峰命名法的 targetName=
是不管用的。
setup(name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base, targetName="what_you_want.exe")])enter code here
但是,使用下划线命名法的 target_name=
就可以正常工作。
setup(name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base, target_name="what_you_want.exe")])
使用 --target-name=NAME
,引用自 文档:
--target-name=NAME
这是用来指定要创建的文件名,而不是脚本的基本名称和基本二进制文件的扩展名。
或者直接使用:
setup(name = "guifoo",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("guifoo.py", base=base, targetName="what_you_want.exe")])
重新发布作为答案:
exe文件cx_Freeze会用它自己的名字来查找要运行的Python脚本。这种做法的好处是,你可以让多个exe文件共享一组库文件。缺点是你不能轻易地重命名这些exe文件。
如果你确实需要重命名exe文件,可以打开library.zip文件,把hello__main__.pyc
改成hey__main__.pyc
(前面的部分应该和你的exe文件名一致)。