首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ImportError:无法使用cx_Freeze导入名称MAXREPEAT

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

Stack Overflow用户
提问于 2013-04-30 21:56:29
回答 5查看 26.4K关注 0票数 15

在运行冻结的应用程序时,我遇到了cx_Freeze的问题(解冻后运行良好)。

当运行该程序时,它会导致以下回溯:

代码语言:javascript
复制
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上使用的是我从源代码构建的Python2.7.4版本,并且可以从提示符导入_sre,并且我可以访问MAXREPEAT常量。

这通常是由于cx_Freeze没有将所有内容都放到library.zip中,可以通过在cx_Freeze的设置包含列表中显式命名模块并将其命名为solution to this similar question来修复,但这在这里没有帮助。

这个_sre模块看起来很奇怪..在生成的library.zip中没有_sre文件,但从该错误中似乎可以找到它,但是它不能导入该符号?当然,如果模块不在那里,它将是一个"No module named _sre“错误。或者可能是循环导入,但_sre存根没有任何导入。

奇怪的是,我似乎也找不到这个文件--这个模块是在导入时动态创建的吗?

代码语言:javascript
复制
find /usr/local/lib/python2.7 -name "_sre*"

不返回任何内容,而且导入的_sre模块也没有__file__属性,所以我不知道如何确保它作为内置模块包含在内。

代码语言:javascript
复制
>>> 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)>"

这也是最近被问到的similar to this question,但在这种情况下,他在常规解释器中得到了错误,但对我来说,这只是cx_Freeze中的错误。

编辑

运行python -v看起来确实像是内置的,所以我不确定为什么cx_Freeze会错过它,或者我如何修复它。

代码语言:javascript
复制
...
# /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
...
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-01 05:53:20

_sre是一个built in module,所以没有文件可以包含它,但是在Python2.7.3中它没有MAXREPEAT属性:

代码语言:javascript
复制
>>> 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'

我最好的猜测是,您的冻结副本不知何故包含了Python2.7.4中的标准库.py模块,但2.7.3或更早版本的编译后的Python解释器。我看到你是在/usr/local上工作--也许是从/usr上下载了一个旧版本。

票数 14
EN

Stack Overflow用户

发布于 2013-05-21 14:17:38

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

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

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

mkvirtualenv <existing virtualenv name>

票数 32
EN

Stack Overflow用户

发布于 2013-09-05 03:28:42

如果所有其他方法都失败了,我可以使用以下命令运行程序:http://www.kiwisoft.co.uk/blog/2014/08/17/fixed-importerror-cannot-import-name-maxrepeat

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16301735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档