我一直在尝试使用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。
提前感谢您的帮助。
答案 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名称匹配)。