当试图运行一个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'
我想,无论你正在尝试运行期待与蟒蛇的特殊调试版本中使用。 sys.pydebug
通常不会在sys模块的标准发行版中发现的,我相信它会在那里,如果你建立了一个调试的Python:
http://docs.python.org/c-api/intro.html#debugging-builds
这是可能的,这也可能是于Debian / Ubuntu的发行版使用的是特定版本的一部分。
试图运行在一个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] $
运行时,收到错误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
中提供libpython
到gdb
,而不是Ubuntu官方的Python在/usr/lib
,这是造成错误-无论离品牌的Python这是/usr/local
不得被以同样的方式编译Ubuntu的Python的编译,等的期望gdb
正在失望。
解决的办法是使用环境来控制连接的行为,使其更喜欢系统libpython
。 良好的措施,我也重置我的PATH
回来的东西完全标准。 我觉得这工作:
PATH=/bin:/usr/bin LD_LIBRARY_PATH=/usr/lib gdb ...
在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();