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

时间:2015-11-10 11:17:41

标签: python import namespaces python-2.6

我自己构建了一个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

,而不是注释掉该行

1 个答案:

答案 0 :(得分:0)

相对导入导致None - 在nr.c4d sys.modulesnr.__path__次展开之前为localimport创建了nr.procedural条目。这是我在import c4d存储库中打开的问题:

  

情景nr.c4d执行sys.modules。如果_localimport不存在,则该模块将作为无条目添加到nr.c4d。如果然后使用_localimport导入__enter__(),则找不到模块,因为模块缓存表示该模块不存在(通过None-entry)。

     

解决方案from __future__ import absolute_import必须删除nr.上命名空间包的无条目。

fix相对容易。

我需要将import c4d添加到$scope.myObject = {}; // Empty scope variable $scope.myObject.cAddress = ""; // initialize your model for the input. 的所有<input type="text" name="cAddress" ng-model="myObject.cAddress" required/> 子包中。