Python - os.path不存在:AttributeError:'module'对象没有属性'path'

时间:2014-02-08 01:37:46

标签: python path python-import corruption built-in

调查一下我开始使用gdb-python突然出现的一个奇怪错误,我把它简化为:

C:\Users\User>python -i
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> dir(os.path)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'path'
>>> dir(os)
['__builtins__', '__doc__', '__file__', '__name__', '__package__']

查看其他一些'module' object has no attribute答案,最常见的建议是os.py中某处必须有另一个流氓sys.path,并且它已被加载,而不是内置的在一个。但我检查了PYTHONPATH环境变量,并在当前目录中,没有任何其他os.py

所以我找了一种方法来查找定义实体的文件的名称,毫不奇怪,Python以inspect模块的形式有such a facility

>>> inspect.getsourcelines(os)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Programs\Python273\lib\inspect.py", line 690, in getsourcelines
    lines, lnum = findsource(object)
  File "C:\Programs\Python273\lib\inspect.py", line 527, in findsource
    sourcefile = getsourcefile(object)
  File "C:\Programs\Python273\lib\inspect.py", line 451, in getsourcefile
    if os.path.exists(filename):
AttributeError: 'module' object has no attribute 'path'

所以inspect依赖于os.path,然后我的想法用完了。

我最近没有安装任何新东西。唯一发生的事情是我必须做的强制关机,这可能与运行Python脚本同时发生,因为当机器无响应并且发生强制关机时,我在循环中反复运行一个简短的Python脚本。

2 个答案:

答案 0 :(得分:5)

浪费了很多时间后,我想通了。在C:\Programs\Python273\Lib下查看,我注意到os.pyc的尺寸远小于os.pyos.pyo,而对于其他模块,abc.pyc的大小相同abc.pyo并略小于abc.py。查看os.pyc内部,它仅包含:

^Có
\{GOc^@^@^@^@^@^@^@^@^A^@^@^@@^@^@^@s^D^@^@^@d^@^@S(
^A^@^@^@N(^@^@^@^@(^@^@^@^@(^@^@^@^@(^@^@^@^@s^_^@^@
^@C:\Programs\Python273\lib\os.pyt^H^@^@^@<module>^A
^@^@^@s^@^@^@^@

(这是它在Vim中的显示方式。)(注意:t末尾的os.pyt不是文件名的一部分。)

删除此文件(以及另外两个具有相同故事的.pyc个文件)解决了这个问题。

所以发生的事情必须是python由于某种原因重新编译osos.pyc(为什么?如果它之前已经编译过?)并且输出了文件的第一部分(它本身作为文件有效),然后在有机会输出其余部分之前发生强制关机。因此,当操作不是原子时,这是一个令人沮丧的问题的例子。

另外,事实证明我可以更快地跟踪它,因为做了

>>> inspect.getfile(os)
'C:\\Programs\\Python273\\lib\\os.pyc'

os.path不可用时仍然有效。

答案 1 :(得分:0)

我有同样的问题,C:\ Python27 \ Lib \ os.py根本没有readlink()函数。搜索了Lib并找到了它使用的6个步骤,但没有定义:

Python 2.7(r27:82525,2010年7月4日,09:01:59)[MSC v.1500 32位(英特尔)]在win32上

C:\Python27\Lib\pdb.py(1194):                 dirname = os.readlink(dirname)
C:\Python27\Lib\platform.py(952):             os.path.join(os.path.dirname(filepath),os.readlink(filepath)))
C:\Python27\Lib\posixpath.py(386):         resolved = os.readlink(path)
C:\Python27\Lib\rexec.py(146):     ok_posix_names = ('error', 'fstat', 'listdir', 'lstat', 'readlink',
C:\Python27\Lib\shutil.py(183):                 linkto = os.readlink(srcname)
C:\Python27\Lib\tarfile.py(1873):             linkname = os.readlink(name)