【发布时间】:2015-11-10 11:17:41
【问题描述】:
我已经为自己构建了一个 Python 库集合,我在 nr 命名空间下收集这些库。现在对于名为 C4D 的应用程序中的 Python 插件,我想使用 nr.c4d 模块,但无法导入。奇怪的是,如果我将其重命名为其他任何名称(例如 nr.c4dlib),它就可以工作!
+ nr.c4d\
+ nr\
* __init__.py # < pkgutil.extend_path() in here
+ c4d\
* __init__.py
* gui.py
* ...
这是每个命名空间__init__.py中的代码
# This is a namespace package.
try:
import pkg_resources
pkg_resources.declare_namespace(__name__)
except ImportError:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
nr.__path__ 列表似乎也不错。
['C:\\maxon\\Cinema 4D R16 Dev\\plugins\\procedural\\python\\nr',
'C:\\maxon\\Cinema 4D R16 Dev\\plugins\\cloudui_frontend_r16\\devel\\nr.strex\\nr',
'C:\\maxon\\Cinema 4D R16 Dev\\plugins\\cloudui_frontend_r16\\devel\\nr.concurrency\\nr',
'C:\\maxon\\Cinema 4D R16 Dev\\plugins\\cloudui_frontend_r16\\devel\\nr.cli\\nr',
'C:\\maxon\\Cinema 4D R16 Dev\\plugins\\cloudui_frontend_r16\\devel\\nr.c4d\\nr']
但我明白了
Traceback (most recent call last):
File "'cloudui_frontend.pyp'", line 176, in <module>
ImportError: No module named c4d
环境中可能有一个名为c4d 的内置模块。这个错误的根源是什么?如何解决?
更新问题似乎来自另一个名为nr.procedural 的命名空间模块。它在文件顶部执行import c4d。如果该行被注释掉,则导入 nr.c4d 有效!另外,我可以添加from __future__ import absolute_import,而不是注释掉该行。
【问题讨论】:
标签: python import namespaces python-2.6