Cx_Freeze无法识别某些导入

时间:2014-06-23 12:34:50

标签: pyqt lxml libxml2 cx-freeze

使用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'
]

2 个答案:

答案 0 :(得分:3)

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

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

请注意,此解决方案实际上来自这些来源,其中人们遇到与py2exe或其他包含cx_freeze的类似问题:

Why am I getting this ImportError?

cx_Freeze ImportError: cannot import name

答案 1 :(得分:0)

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

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