ImportError:无法使用cx_Freeze导入名称MAXREPEAT

时间:2013-04-30 13:56:29

标签: python python-2.7 cx-freeze

我在运行冻结的应用程序时遇到cx_Freeze的问题(工作正常解冻)。

运行程序时,会产生以下追溯:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/cx_Freeze/initscripts/Console.py", line 27, in <module>
    exec code in m.__dict__
  File "PythonApp/mainframe.py", line 3, in <module>
  File "/usr/local/lib/python2.7/site-packages/dbus/__init__.py", line 103, in <module>
    from dbus._dbus import Bus, SystemBus, SessionBus, StarterBus
  File "/usr/local/lib/python2.7/site-packages/dbus/_dbus.py", line 39, in <module>
    from dbus.bus import BusConnection
  File "/usr/local/lib/python2.7/site-packages/dbus/bus.py", line 39, in <module>
    from dbus.connection import Connection
  File "/usr/local/lib/python2.7/site-packages/dbus/connection.py", line 27, in <module>
    import threading
  File "/usr/local/lib/python2.7/threading.py", line 44, in <module>
    module='threading', message='sys.exc_clear')
  File "/usr/local/lib/python2.7/warnings.py", line 57, in filterwarnings
    import re
  File "/usr/local/lib/python2.7/re.py", line 105, in <module>
    import sre_compile
  File "/usr/local/lib/python2.7/sre_compile.py", line 14, in <module>
    import sre_parse
  File "/usr/local/lib/python2.7/sre_parse.py", line 17, in <module>
    from sre_constants import *
  File "/usr/local/lib/python2.7/sre_constants.py", line 18, in <module>
    from _sre import MAXREPEAT
ImportError: cannot import name MAXREPEAT

我在linux上使用我从源代码构建的python 2.7.4版本,从提示符导入_sre起作用,我可以访问MAXREPEAT常量。

这通常低至cx_Freeze而不是将所有内容都移到library.zip中,并且可以通过在cx_Freeze的设置包含列表中明确命名模块来修复,并且是solution to this similar question,但这在这里没有帮助。

_sre模块看起来很奇怪.. _sre生成的library.zip文件中没有No module named _sre文件,但是从该错误看起来它似乎可以找到它,但它无法导入该符号?当然,如果模块不存在,则会出现“_sre”错误。或者可能是循环导入,但find /usr/local/lib/python2.7 -name "_sre*" 存根没有任何导入。

奇怪的是我似乎无法找到该文件 - 这个模块是在导入时以某种方式动态创建的吗?

_sre

没有返回任何内容,导入的__file__模块也没有>>> import _sre >>> _sre.__file__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'module' object has no attribute '__file__' >>> repr(_sre) "<module '_sre' (built-in)>" 属性,因此我不知道如何确保它包含在内,因为它显示为内置-in。

cx_Freeze

这也是最近被问到的similar to this question,但是在这种情况下,他在常规口译中遇到了错误,但对我而言,它只是在python -v

修改

运行cx_Freeze看起来确实是内置的,所以我不确定为什么... # /usr/local/lib/python2.7/re.pyc matches /usr/local/lib/python2.7/re.py import re # precompiled from /usr/local/lib/python2.7/re.pyc # /usr/local/lib/python2.7/sre_compile.pyc matches /usr/local/lib/python2.7/sre_compile.py import sre_compile # precompiled from /usr/local/lib/python2.7/sre_compile.pyc import _sre # builtin # /usr/local/lib/python2.7/sre_parse.pyc matches /usr/local/lib/python2.7/sre_parse.py import sre_parse # precompiled from /usr/local/lib/python2.7/sre_parse.pyc ... 会错过它,或者我是如何修复它的。

{{1}}

6 个答案:

答案 0 :(得分:33)

当我刚刚从ubuntu 12.10升级到13.04时遇到了这个问题,我通过将/ usr / bin / python复制到/ path /到/ my / env / bin /来解决这个问题,并且它工作得很好

cp /user/bin/python /path/to/my/env/bin/

或者,有一种更优雅的方法来解决这个问题(reference):

mkvirtualenv <existing virtualenv name>

答案 1 :(得分:14)

_srebuilt in module,因此没有要包含的文件,但它在Python 2.7.3中没有MAXREPEAT属性:

>>> import _sre
>>> _sre
<module '_sre' (built-in)>
>>> _sre.MAXREPEAT
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'MAXREPEAT'

我最好的猜测是你的冷冻副本在某种程度上具有Python 2.7.4中的标准库.py模块,但是来自2.7.3或更早版本的已编译Python解释器。我看到你正在/usr/local工作 - 也许它正在从/usr获取旧版本。

答案 2 :(得分:2)

如果所有其他方法都失败了,我就会使用这个来运行:http://www.kiwisoft.co.uk/blog/2014/08/17/fixed-importerror-cannot-import-name-maxrepeat

答案 3 :(得分:1)

我最近遇到了同样的问题。设置LD_LIBRARY_PATH = 解决了这个问题。

答案 4 :(得分:1)

我在win 8机器上使用了cx_freeze 4.3.2,如果我试图冻结非内置模块,它总是显示ImportError: cannot import name MAXREPEAT with cx Freeze,一旦我下载了4.3.1版本,它就可以了,我现在可以毫无问题地冻结我的所有python 3.3程序。

答案 5 :(得分:0)

我在Windows 8上遇到类似的问题 - 只是一个PYTHONPATH问题。通过在python会话中键入以下内容来检查PYTHONPATH是否存在:

  
    
      

导入os

             

os.environ ['PYTHONPATH'] .split(os.pathsep)

    
  

如果你使用这种方法设置了你的PYTHONPATH错误..

How to add to the pythonpath in windows 7?