Py2exe lxml 问题

27 投票
2 回答
10359 浏览
提问于 2025-04-16 13:43

我有一个用wxpython写的应用程序,它依赖于lxml库,在通过python解释器运行时一切正常。不过,当我用py2exe创建exe文件时,出现了一个错误。

ImportError: No module named _elementpath

然后我用了 python setup.py py2exe -p lxml 命令,这次没有出现之前的错误,但又出现了另一个错误,内容是:

ImportError: No module named gzip

有人能告诉我问题出在哪里吗?我该怎么解决?另外,我需要把像libxml2、libxslt这样的dll文件放到我的dist文件夹里吗?我在电脑上搜索过这些文件,但没找到,所以可能不需要吧?

谢谢。

编辑:我刚刚试了 python setup.py py2exe -p -i gzip,exe文件成功创建了。但是生成的exe文件无法运行。我双击它,什么也没有发生。

这是我使用的setup.py脚本:

from py2exe.build_exe import py2exe
from distutils.core import setup

setup( windows=[{"script": "gui.py"}] )



编辑2:我尝试用cx_freeze作为替代方案,但得到了同样的错误。

ImportError: No module named _elementpath

之后我不知道该怎么继续了。

2 个回答

0

有时候,在修改完 setup.py 文件后,你还需要进行其他操作。

正如这里所描述的,如果你的包是以“eggs”格式安装的,那么你需要先卸载这个包。然后再通过强制 easy_install 解压这个包,使用 "-Z" 选项来重新安装,具体操作如下(我在处理 paramiko 包时遇到过这个问题):

pip uninstall paramiko
easy_install -Z paramiko
43

Py2exe 让你可以通过 options 参数在 setup() 中指定额外的包或模块,这样即使它们没有被自动检测到也能包含进来。下面的代码应该可以正常工作:

from distutils.core import setup
import py2exe

setup(
    windows=[{'script': 'gui.py'}],
    options={
        'py2exe': 
        {
            'includes': ['lxml.etree', 'lxml._elementpath', 'gzip'],
        }
    }
)

我最近还发现了 PyInstaller,它内置支持一些知名的包,比如 lxml,所以你也可以试试这个。

撰写回答