简而言之,这是如何发生的?
(不,我的系统中没有名为backports或backports.py的文件或目录。)
编辑以澄清:我知道这可能代表了我的系统的奇怪配置状态。我的问题不是“如何修复”,而是“这怎么可能?”
cternus@astarael:~⟫ python
Python 2.7.12 (default, Jun 29 2016, 14:05:02)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import backports
>>> import imp
>>> imp.find_module('backports')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named backports
imp
模块声称自己是“实现 import 语句所使用机制的接口”。如果是这样,为什么 import
语句可以找到 backports
,但 imp.find_module()
却不能呢?
一些背景信息:backports 声称自己是一个“命名空间包”,而不是一个独立的包;其他模块,例如 backports.shutil_get_terminal_size
,位于该命名空间中。这构成了 被最终拒绝的 PEP 的基础。我提出这个问题是因为我遇到了 类似的问题 的变体,并正在尝试找到原因。
更奇怪的是:
>>> backports.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'
>>> dir(backports)
['__doc__', '__name__', '__path__']
>>> backports.__path__
['/Library/Python/2.7/site-packages/backports']
>>> import os; os.path.exists(backports.__path__[0])
False
(不,我的系统中没有名为backports或backports.py的文件或目录。)
编辑以澄清:我知道这可能代表了我的系统的奇怪配置状态。我的问题不是“如何修复”,而是“这怎么可能?”
backports.__file__ == '.../lib/python2.7/site-packages/backports/__init__.pyc'
。你是如何安装backports的? - dhkeimport backports
之前,请尝试检查"backports" in sys.modules
,如果已经加载,请在del sys.modules["backports"]
之后再次导入。 - Tadhg McDonald-Jensen'backports': <module 'backports' (built-in)>
呃呃呃 - Christian Ternus