3

我正在尝试使用 cx_Freeze 编译使用 Python3 和 PyQt4 编写的简单脚本,但是我遇到了三个我无法弄清楚的问题。

  1. 我无法让图标出现。我正在为其使用已编译的资源文件,即导入包含资源的 .py,并且我尝试按照此处的建议,将 imageformats 文件夹复制到我的项目文件夹中,但似乎没有任何效果。

  2. 我没有使用包括 tcl 和 ttk 在内的多个 python 模块,所以我将它们添加到excludes选项中。但是,它们似乎仍然被添加。

  3. 当我尝试通过base='Win32GUI'运行创建的 exe 进行编译时会引发异常:'NoneType' has no attribute 'encoding'

我很确定我的设置脚本有问题,因为 cx_Freeze 文档不是很冗长,所以希望有人能指出问题所在。这是设置脚本。我不会发布我正在编译的脚本,因为它很长,但如果需要,我会尝试创建一个简洁的版本进行测试。

from cx_Freeze import setup, Executable

exe = Executable(
    script='cconvert.py',
    base='Win32GUI'
)

options = dict(
    excludes=['curses', 'email', 'tcl', 'ttk']
)

setup(
    name="Coord Convertor",
    version="0.1",
    description="A Coordinate converter from DMS to DD",
    requires=['pyqt4 (>=4.8)', 'dtlibs (>=0.4.1)'],
    data_files=['imageformats'],
    executables=[exe],
    options={'build-exe': options}
)
4

2 回答 2

6

解决了。除了 Thomas 的指针之外,我还需要在选项中的“include-files”下放置“imageformats”,而不是“data_files”。我的最终脚本如下所示:

from cx_Freeze import setup, Executable

exe = Executable(
    script='cconvert.pyw',
    base='Win32GUI'
)

options = dict(
    excludes=['curses', 'email', 'tcl', 'ttk', 'tkinter'],
    include_files=['imageformats']
)

setup(
    name="Coord Convertor",
    version="0.1",
    description="A Coordinate converter from DMS to DD",
    requires=['pyqt4 (>=4.8)', 'dtlibs (>=0.4.1)'],
    executables=[exe],
    options={'build_exe': options}
)
于 2012-03-13T13:52:34.740 回答
3

(请注意关于 1。)

2:在options={'build-exe'...中,我认为它需要是build_exe(下划线而不是破折号)。

3:你想访问sys.stdout.encoding任何地方的东西吗?sys.stdout当您使用 Win32GUI 基础时将为无。即使是一个print()电话也可能触发它。

于 2012-03-13T12:50:10.373 回答