5

Python スクリプトを実行しようとすると、エラーが発生しますAttributeError: 'module' object has no attribute 'pydebug'。Python 2.6 を使用しています。

完全なエラー:

File "/lib/python2.6/distutils/sysconfig.py", line 238, in get_makefile_filename
    return os.path.join(lib_dir, "config" + (sys.pydebug and "_d" or ""), "Makefile")
AttributeError: 'module' object has no attribute 'pydebug'
4

4 に答える 4

4

gdb別のバージョンの Python がインストールされていて、リンカーによって優先されている Ubuntu システムで実行すると、エラーが発生します。lddを使用して、どのライブラリgdbが使用しているかを尋ねることで、これがあなたのケースで起こっているかどうかを確認できます。

# ldd $(which gdb)
...
        libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x00007ff75e044000)
...

エラーの原因となっている公式の Ubuntu Python の代わりに、で実行されているブランド外のバージョンの Python/usr/local/libが に供給libpythonされていることがわかります。がまとめられていたので、 の期待は裏切られています。gdb/usr/lib/usr/localgdb

解決策は、環境を使用してリンカーの動作を制御し、システムを優先させることですlibpythonPATH念のため、背中も完全に標準的なものにリセットしました。これが機能することがわかりました:

PATH=/bin:/usr/bin LD_LIBRARY_PATH=/usr/lib gdb ...
于 2015-09-29T14:45:31.497 に答える
4

自分で構築した python で Ubuntu 12.04.1 システム gdb を実行しようとしたときに、この問題が発生しました。Ubuntu はシステム gdb にいくつかのフックを組み込み、Python のデバッグ バージョンを使用できるようにしていると思います。しかし、フックは自分のpythonでは何にも引っかかりません。独自の gdb を構築し、代わりにそれを実行することで、これを回避しました。

コマンドラインと完全なトレースバックは次のとおりです。

price@neverland:~/LSST/ip_diffim[master] $ gdb --args python tests/SnapPsfMatch.py 
Traceback (most recent call last):
  File "/usr/lib/python2.7/site.py", line 562, in <module>
    main()
  File "/usr/lib/python2.7/site.py", line 544, in main
    known_paths = addusersitepackages(known_paths)
  File "/usr/lib/python2.7/site.py", line 271, in addusersitepackages
    user_site = getusersitepackages()
  File "/usr/lib/python2.7/site.py", line 246, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/usr/lib/python2.7/site.py", line 236, in getuserbase
    USER_BASE = get_config_var('userbase')
  File "/usr/lib/python2.7/sysconfig.py", line 577, in get_config_var
    return get_config_vars().get(name)
  File "/usr/lib/python2.7/sysconfig.py", line 476, in get_config_vars
    _init_posix(_CONFIG_VARS)
  File "/usr/lib/python2.7/sysconfig.py", line 337, in _init_posix
    makefile = _get_makefile_filename()
  File "/usr/lib/python2.7/sysconfig.py", line 331, in _get_makefile_filename
    return os.path.join(get_path('platstdlib').replace("/usr/local","/usr",1), "config" + (sys.pydebug and "_d" or ""), "Makefile")
AttributeError: 'module' object has no attribute 'pydebug'

/usr/libそのため、システムにそうしないように指示したにもかかわらず、間違った python (in) を探しているようです:

price@neverland:~/LSST/ip_diffim[master] $ which python
/home/price/eups/Linux/python/2.7.2/bin/python
price@neverland:~/LSST/ip_diffim[master] $ echo $PYTHONPATH | grep usr
price@neverland:~/LSST/ip_diffim[master] $ 
于 2012-09-14T17:52:25.593 に答える
3

あなたが実行しようとしているものは何でも、Pythonの特別なデバッグビルドで使用されることを期待していると思います. sys.pydebug通常、sys モジュールの標準リリースにはありません。デバッグ用の python をビルドすれば、そこにあると思います。

http://docs.python.org/c-api/intro.html#debugging-builds

これは、Debian/Ubuntu ディストリビューションが使用している特定のビルドの一部である可能性もあります。

于 2012-05-17T19:49:58.853 に答える