15

フリーズしたアプリケーションを実行しているときに問題が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

ソースからビルドしたpython 2.7.4のバージョンを使用してLinuxを使用しており_sre、プロンプトからのインポートが機能し、MAXREPEAT定数にアクセスできます。

これは通常、cx_Freezeすべてを取り込まないことが原因であり、セットアップ インクルード リストでlibrary.zipモジュールに明示的に名前を付けることで修正できます。これがこの同様の質問の解決策ですが、ここでは役に立ちませんでした。cx_Freeze

この_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)>"

これは、最近尋ねられたこの質問にも似ていますが、この場合、彼は通常のインタープリターでエラーを取得していましたが、私にとっては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
...
4

6 に答える 6

14

_sre組み込みモジュールであるため、含めるファイルはありませんが、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ます。

于 2013-04-30T21:53:19.843 に答える
2

他のすべてが失敗した場合は、これを使用して実行できます: http://www.kiwisoft.co.uk/blog/2014/08/17/fixed-importerror-cannot-import-name-maxrepeat

于 2013-09-04T19:28:42.497 に答える
1

Win 8マシンでcx_freeze 4.3.2を使用していましたがImportError: cannot import name MAXREPEAT with cx Freeze、非組み込みモジュールをフリーズしようとしたことが常に表示されていました。バージョン4.3.1をダウンロードすると、動作し、すべてをフリーズできます現在、python 3.3 プログラムは問題なく動作しています。

于 2014-04-09T02:17:07.070 に答える
1

私は最近同じ問題を抱えていました。LD_LIBRARY_PATH= を設定すると問題が解決しました。

于 2014-02-18T22:44:45.170 に答える
0

Windows 8でも同様の問題が発生していました-単なるPYTHONPATHの問題でした。Python セッションに次のように入力して、PYTHONPATH が存在することを確認します。

OSのインポート

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

エラーが発生した場合は、このアプローチを使用して PYTHONPATH を設定してください。

Windows 7でpythonpathに追加するには?

于 2014-04-30T02:34:18.483 に答える