我在运行冻结的应用程序时遇到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}}
答案 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)
_sre
是built 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错误..