CxFreeze 无法识别某些进口

Posted

技术标签:

【中文标题】CxFreeze 无法识别某些进口【英文标题】:CxFreeze is not recognizing certain imports 【发布时间】:2014-06-23 12:34:49 【问题描述】:

使用 CX_Freeze 构建可执行文件并尝试运行 .exe 后,我收到此错误。我理解这意味着 CxFreeze 无法识别 lxml。但是我试图将它包含在我的 setup.py 中

Traceback(most recent call last):
   File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py",
line 27, in <module>
    exec(code, m._dict_)
   File "mainFile.py", line 2, in <module>
   File "C:\Users\user\TestFile\testPyQt.py",line 11, in
  <module>
     import myFile
   File "C:\Users\user\TestFile\myFile.py", line 4, in 
  <module>
    from lxml import etree
   File "ExtensionLoader_lxml_etree.py", line 22, in <module>
   File "ExtensionLoader_lxml_etree.py", line 14, in _bootstrap_
   file "lxml.etree.pyx", line 84, in init lxml.etree
  (src\lxml\lxml.etree.c:191837)
   ImportError:cannot import name_elementpath

我的 setup.py 有这个:

INCLUDE_MODULES = [

    'lxml',
    'xml.etree.ElementTree',
    'xml.etree.ElementPath',
    'libxml2'
]

【问题讨论】:

如果你从 library.zip 中删除 lxml,并将整个 lxml 包复制到你的 exe 所在的构建目录中,它可以工作吗? 在哪里可以找到 libary.zip? 它也将在 cx_Freeze 制作你的 exe 的构建目录中。 【参考方案1】:

看起来有点像错误消息缺少空格。我很确定它抱怨无法导入“lxml._elementpath”。这是因为该模块是由 lxml 有条件地导入的。

解决方案是将lxml._elementpath 添加到您的INCLUDE_MODULES 列表中。

注意,这个解决方案实际上来自这些来源,人们在使用 py2exe 或其他带有 cx_freeze 的软件包时遇到了类似的问题:

Why am I getting this ImportError?

cx_Freeze ImportError: cannot import name

【讨论】:

谢谢,很有帮助。【参考方案2】:

对我来说有帮助的是 ThomasK 上面指出的解决方案: 我 jsut 去了 python\site-packages\lxml 并将整个文件夹复制到 \dist 文件夹,cxfreeze 将所有其他文件复制到该文件夹​​。

当然,这并不能解决问题本身,而是通过实际的解决方案。

【讨论】:

以上是关于CxFreeze 无法识别某些进口的主要内容,如果未能解决你的问题,请参考以下文章

某些 Windows 窗体控件无法识别?

IntelliJ 无法识别来自 gradle 项目的某些导入

为啥某些 Swift 标准库函数在 Playground 中无法识别?

Google 地理编码 API 无法识别某些邮政编码

Alexa 无法识别某些依赖于样本话语的槽值

自从有了我的 Mac 后,Android Studio 项目无法识别某些类