Python - os.path 不存在:AttributeError:“模块”对象没有属性“路径”

问题描述 投票:0回答:3

调查我突然开始使用 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 模块的形式提供了

这样的工具

>>> 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 脚本。

python path python-import corruption built-in
3个回答
6
投票

在浪费了很多时间之后,我想通了。查看

C:\Programs\Python273\Lib
,我注意到
os.pyc
的大小比
os.py
os.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^@^@^@^A
^@^@^@s^@^@^@^@

(这是它在 Vim 中的显示方式。)(注意:

t
末尾的
os.pyt
不是文件名的一部分。)

删除此文件(以及具有相同故事的其他两个

.pyc
文件)解决了问题。

所以发生的事情一定是

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

而且,事实证明我可以更快地找到它,因为这样做

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

os.path

 不可用时,
仍然有效。


0
投票

我有同样的问题,C:\Python27\Lib\os.py 根本没有 readlink() 函数。搜索了 Lib,发现 6paces 正在使用,但没有定义:

Win32 上的 Python 2.7(r27:82525,2010 年 7 月 4 日,09:01:59)[MSC v.1500 32 位(Intel)]

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)

0
投票

Evgeni 您能否告知您删除了哪些 .pyc 文件以使其正常工作?谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.