使用cx_freeze编译Python代码后更改可执行文件名称

0 投票
3 回答
4316 浏览
提问于 2025-04-17 23:25

我一直在尝试让我用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.pycxfreeze_setup.py脚本做什么修改,才能在编译后自由修改可执行文件的名称,这一点在py2exe中是完全可以做到的。

提前感谢任何帮助。

3 个回答

1

在用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")])
3

使用 --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")])
0

重新发布作为答案:

exe文件cx_Freeze会用它自己的名字来查找要运行的Python脚本。这种做法的好处是,你可以让多个exe文件共享一组库文件。缺点是你不能轻易地重命名这些exe文件。

如果你确实需要重命名exe文件,可以打开library.zip文件,把hello__main__.pyc改成hey__main__.pyc(前面的部分应该和你的exe文件名一致)。

撰写回答