冻结(.exe)一个traitsUI程序,实际可行吗?

2024-09-26 18:09:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用cx_freeze或pyInstaller冻结一个TraitsUI程序,该程序利用Chaco、TraitsUI、TraitsUI和较小程度的mayavi(实际上可以被删除)。我需要这个在mac,linux,ubuntu上运行,所以我要避免py2exe。我特意卸载了pyqt和pyside,以便只有wx后端可用。

在使用cx_freeze时,我遇到并报告了一个bug,因此pyInstaller似乎帮了我最大的忙。它生成了一个.exe文件,但当我运行该文件时,我收到警告和一个错误。要生成.exe文件,请执行以下操作:

pyinstaller --onefile --name=pameapp pamemain.py 
pyinstaller pameapp.exe

运行时,警告为:

^{pr2}$

另外,我得到以下错误:

Traceback (most recent call last):
  File "<string>", line 8, in <module>
  File "/home/glue/anaconda/envs/fibersim/lib/python2.7/site-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traitsui.api", line 35, in <module>
  File "/home/glue/anaconda/envs/fibersim/lib/python2.7/site-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traitsui.editors", line 22, in <module>
  File "/home/glue/anaconda/envs/fibersim/lib/python2.7/site-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traitsui.editors.api", line 10, in <module>
  File "/home/glue/anaconda/envs/fibersim/lib/python2.7/site-packages/PyInstaller/loader/pyi_importers.py", line 270, in load_module
    exec(bytecode, module.__dict__)
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traitsui.editors.code_editor", line 36, in <module>
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traitsui.editors.code_editor", line 48, in ToolkitEditorFactory
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traits.traits", line 487, in __call__
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traits.traits", line 1191, in Color
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traitsui.toolkit_traits", line 7, in ColorTrait
  File "/home/glue/Desktop/fibersim/pame/build/pameapp/out00-PYZ.pyz/traitsui.toolkit", line 137, in toolkit
traits.trait_errors.TraitError: Could not find any UI toolkit called 'null'

pyface可能有很多动态导入,所以这肯定是任何试图冻结ETS的人都会遇到的问题。有没有一个单一的解决办法来让这个工作?在

考虑到网上流传的关于成功率的老东西冻结了一个ETS项目,是否值得进一步投资?对我们来说,让人们避免为这个应用程序配置python将是一个巨大的好处。在

谢谢。在


Tags: inbuildhomelinepyzfilegluemodule
1条回答
网友
1楼 · 发布于 2024-09-26 18:09:17

在Pyface.toolkit软件包您正在使用的是使用动态导入:

def import_toolkit(tk):
    try:
        # Try and import the toolkit's pyface backend init module.
        be = 'pyface.ui.%s.' % tk
        __import__(be + 'init')
    except:
        raise
    return be

所以pyinstaller无法检测到这一点。检查python -v b.py 2>&1 | grep imp什么是特定的导入,并使用适当的hiddenimports列表添加钩子文件(hook-.py)。在

{3}但是我不能在cdam>中进行测试。奇怪的是,我做了一些调试,发现添加了hiddenimport,但仍然不可用。在

相关问题 更多 >

    热门问题