【发布时间】:2013-04-24 11:34:16
【问题描述】:
我在运行冻结的应用程序时遇到了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_Freezes 设置包含列表中显式命名模块并且是solution to this similar question 来修复,但这在这里没有帮助。
这个_sre 模块看起来很奇怪.. 生成的library.zip 中没有_sre 文件,但是从那个错误看来它可以找到它,但是它不能导入那个符号?当然,如果该模块不存在,那将是“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)>"
这是similar to this question,也是最近被问到的,但在这种情况下,他在常规解释器中遇到了错误,但对我来说它只是在cx_Freeze。
编辑
运行 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
...
【问题讨论】:
标签: python python-2.7 cx-freeze