我已经为自己构建了一个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,而不是注释掉这一行。
发布于 2015-11-10 12:16:30
相对导入导致在第二次扩展None-entry之前为sys.modules中的nr.c4d创建一个nr.__path__。这是我在localimport存储库中打开的问题:
场景:
nr.procedural做import c4d。如果nr.c4d不存在,则模块将作为无项添加到sys.modules中。如果然后使用_localimport导入nr.c4d,则将找不到模块缓存,因为模块缓存表明模块不存在(通过无条目)。 解决方案:_localimport必须删除__enter__()上命名空间包的任何条目。
修复相对容易。
不过,我需要将from __future__ import absolute_import添加到import c4d的所有nr.子包中。
https://stackoverflow.com/questions/33628750
复制相似问题