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

时间:2014-03-22 15:21:09

标签: python executable py2exe cx-freeze

我一直在尝试使用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。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

使用--target-name=NAME,引自doc

  

- 目标名称= 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")])

答案 1 :(得分:0)

重新作为答案:

exe cx_Freeze使用自己的名称来查找要运行的Python脚本。这样做的优点是您可以让多个exes共享一组库。缺点是你不能轻易地重命名exes。

如果您确实需要重命名exe,请打开library.zip,并将hello__main__.pyc重命名为hey__main__.pyc(第一位应与您的exe名称匹配)。