我已經構建了自己的Python庫,我在nr
命名空間下收集了這些庫。現在,對於名爲C4D的應用程序中的Python插件,我想使用nr.c4d
模塊,但無法導入。奇怪的是,如果我將它重命名爲其他任何東西(例如nr.c4dlib
),它就可以工作!無法導入名稱空間包「c4d」,但它的任何其他名稱都可以使用
+ 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
來代替註釋。