【发布时间】:2016-08-12 07:34:32
【问题描述】:
简而言之,这怎么会发生?
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 语句可以找到backports,而imp.find_module() 却找不到?
对于某些背景:backports 声称是“命名空间包”,而不是本身的包;其他模块,例如backports.shutil_get_terminal_size,位于此命名空间中。这构成了an ultimately-rejected PEP 的基础。我问这个问题是因为我有 this issue 的变体,并且正在尝试追查原因。
更多怪异:
>>> 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 的文件或目录。)
编辑澄清:我知道这可能代表我系统的一种奇怪的配置状态。我的问题不是“我该如何解决这个问题”,而是“这怎么可能?”
【问题讨论】:
-
可能应该是“我的 Python 环境有什么特别之处?”,因为我得到了
backports.__file__ == '.../lib/python2.7/site-packages/backports/__init__.pyc'足够好。你是如何安装 backports 的? -
出于好奇,在执行
import backports之前尝试检查"backports" in sys.modules,如果已经加载,请尝试在del sys.modules["backports"]之后导入 -
@TadhgMcDonald-Jensen
'backports': <module 'backports' (built-in)>Huuuuuhhhh
标签: python python-2.7