AttributeError的:“模块”对象有没有属性“pydebug”(AttributeErro

2019-06-24 13:01发布

当试图运行一个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'

Answer 1:

我想,无论你正在尝试运行期待与蟒蛇的特殊调试版本中使用。 sys.pydebug通常不会在sys模块的标准发行版中发现的,我相信它会在那里,如果你建立了一个调试的Python:

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

这是可能的,这也可能是于Debian / Ubuntu的发行版使用的是特定版本的一部分。



Answer 2:

试图运行在一个Python我自己建了Ubuntu 12.04.1系统GDB时,我打这个问题。 我希望Ubuntu已经建立了一些挂钩到系统GDB,以便它使用的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 ),尽管我已经告诉系统不这样做:

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] $ 


Answer 3:

运行时,收到错误gdb其中的Python的替代版本已被安装和正在由所述接头优选一个Ubuntu系统上。 您可以验证这是否是你的情况发生,通过使用ldd问哪些库gdb使用:

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

你可以看到,在运行的Python离品牌版本/usr/local/lib中提供libpythongdb ,而不是Ubuntu官方的Python在/usr/lib ,这是造成错误-无论离品牌的Python这是/usr/local不得被以同样的方式编译Ubuntu的Python的编译,等的期望gdb正在失望。

解决的办法是使用环境来控制连接的行为,使其更喜欢系统libpython 。 良好的措施,我也重置我的PATH回来的东西完全标准。 我觉得这工作:

PATH=/bin:/usr/bin LD_LIBRARY_PATH=/usr/lib gdb ...


Answer 4:

在Ubunut-12.04 pyinstaller生成的二进制文件从主机的python安装援引“site.py”的呼叫跟踪正在试图获取“sys.pydebug”值。

$ python
Python 2.7.3 (default, Feb 27 2014, 19:58:35)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more 
information.
>>> import sys
>>> sys.pydebug
False

该定制蟒蛇缺少这一点。

HACK:为了使pyinstaller二进制文件在Ubuntu-12.04工作。 加入下面的代码改变定制蟒蛇这对于“sys.pydebug”返回零。

$ diff -Naur Python/sysmodule-org.c Python/sysmodule.c
--- Python/sysmodule-org.c      2018-03-15 09:37:26.539515000 -0700
+++ Python/sysmodule.c  2018-03-15 19:58:34.503031000 -0700
@@ -1106,6 +1106,7 @@
maxunicode -- the largest supported character\n\
builtin_module_names -- tuple of module names built into this 
interpreter\n\
version -- the version of this interpreter as a string\n\
+pydebug -- always return zero\n\
version_info -- version information as a named tuple\n\
hexversion -- version information encoded as a single integer\n\
copyright -- copyright notice pertaining to this interpreter\n\
@@ -1420,6 +1421,8 @@

     SET_SYS_FROM_STRING("version",
                      PyString_FromString(Py_GetVersion()));
+    SET_SYS_FROM_STRING("pydebug",
+                         PyInt_FromLong(0));
     SET_SYS_FROM_STRING("hexversion",
                      PyInt_FromLong(PY_VERSION_HEX));
  svnversion_init();


文章来源: AttributeError: 'module' object has no attribute 'pydebug'