首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法导入命名空间包"c4d“,但它的任何其他名称都有效

无法导入命名空间包"c4d“,但它的任何其他名称都有效
EN

Stack Overflow用户
提问于 2015-11-10 11:17:41
回答 1查看 317关注 0票数 0

我已经为自己构建了一个Python库集合,我在nr命名空间下收集了这些库。现在,对于名为C4D的应用程序中的Python,我想使用nr.c4d模块,但不能导入它。奇怪的是,如果我把它重命名为别的东西的话。nr.c4dlib),它能工作!

代码语言:javascript
运行
复制
+ nr.c4d\
  + nr\
    * __init__.py  # < pkgutil.extend_path() in here
    + c4d\
      * __init__.py
      * gui.py
      * ...

这是每个名称空间__init__.py中的代码

代码语言:javascript
运行
复制
# 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__列表看起来也不错。

代码语言:javascript
运行
复制
['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']

但我得到

代码语言:javascript
运行
复制
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,而不是注释掉这一行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 12:16:30

相对导入导致在第二次扩展None-entry之前为sys.modules中的nr.c4d创建一个nr.__path__。这是我在localimport存储库中打开的问题:

场景nr.proceduralimport c4d。如果nr.c4d不存在,则模块将作为无项添加到sys.modules中。如果然后使用_localimport导入nr.c4d,则将找不到模块缓存,因为模块缓存表明模块不存在(通过无条目)。 解决方案_localimport必须删除__enter__()上命名空间包的任何条目。

修复相对容易。

不过,我需要将from __future__ import absolute_import添加到import c4d的所有nr.子包中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33628750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档