【发布时间】:2013-10-09 11:59:00
【问题描述】:
在 python 中导入模块我需要一点帮助。所以..没有不必要的闲聊:
我有特定的目录和模块结构:
- 多软件/
- 核心/
- __init__.py
- 软1/
- __init__.py
- Controls.py
- Rigs.py
- MySoft/
- __init__.py
- Controls.py
- Rigs.py
现在从用户的角度来看,你只需要导入:
import multisoft.Core as MSC
例如您应该通过以下方式访问子模块:
MSC.Controls.someFunction()
这个模块可以在不同的软件中使用,从用户的角度来看,你在哪个软件中并不重要。这个模块的使用是一样的。当然,子模块的实现,因软件而异。
而且我有一些必须遵守的限制。基本上每个模块都可以有更多或更少的文件。还有__all__ 在每个软件实现中都必须考虑变量:
- MySoft/__init__.py
- Soft1/__init__.py
(在那些初始化文件中,您放置了 __all__ 变量:__all__ = ['Controls', 'Rigs'])
我编写了一部分代码,基本上可以做我想做的事情:
核心/__init__.py
import os
import sys
def _softRecognize():
if youAreInSoft1():
directory = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0,directory)
module = __import__('Soft1', fromlist=['*'])
globals().update(vars(module))
_softRecognize()
但是我不能重新加载这个模块,这是我必须保持的约束之一。
import multisoft.Core as MSC
reload(MSC)
# Error: reload(): module Soft1 not in sys.modules
# Traceback (most recent call last):
# File "<maya console>", line 1, in <module>
# ImportError: reload(): module Soft1 not in sys.modules #
感谢您的帮助
一切顺利 卡米尔
【问题讨论】: