0

Python でモジュールをインポートするのに少し助けが必要です。だから..不要なおしゃべりなしで:

ディレクトリとモジュールの特定の構造があります。

  • マルチソフト/
    • 芯/
    • __init__.py
    • ソフト1/
      • __init__.py
      • Controls.py
      • Rigs.py
    • マイソフト/
      • __init__.py
      • Controls.py
      • Rigs.py

ユーザーの観点からは、次のもののみをインポートします。

import multisoft.Core as MSC

たとえば、次の方法でサブモジュールにアクセスする必要があります。

MSC.Controls.someFunction()

このモジュールはさまざまなソフトウェアで使用でき、ユーザーの観点からは、どのソフトウェアを使用しているかは問題ではありません。このモジュールの使い方は同じです。もちろん、サブモジュールの実装はソフトウェアごとに異なります。

そして、私には守らなければならないいくつかの制約があります。基本的に、すべてのモジュールは多かれ少なかれファイルを持つことができます。また、すべてのソフトウェア実装で __all__ 変数を考慮する必要があります。

  • MySoft/__init__.py
  • Soft1/__init__.py

(これらの init のファイルに __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()

しかし、このモジュールをリロードすることはできません。これは、守らなければならない制約の 1 つです。

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 # 

助けてくれてありがとう

すべての最高のカミル

4

1 に答える 1

0

したがって、インターフェイスを抽象化しようとしています。これを行うには、条件付きインポートまたは変数割り当ての 2 つの方法があります。

# Conditional
if youAreInSoft1(): 
    import Soft1.Controls as Controls
    import Soft1.Rigs as Rigs
else:
    import Soft2.Controls as Controls
    import Soft2.Rigs as Rigs

reload(Controls)
reload(Rigs)

#Variable
import Soft1 as _soft1
import Soft2 as _soft2

Controls = None
Rigs = None

global Controls, Rigs

if youAreInSoft1():
    Controls = _soft1.Controls
    Rigs = _soft1.Controls
else:
    Controls = _soft2.Controls
    Rigs = _soft2.Controls

reload(Controls)
reload(Rigs)

どちらの場合も、サブモジュールが必要なものをリロードする必要があります。つまり、コントロールをリロードすると、その動作が必要な場合は、そのサブモジュールもダウンしてリロードする必要があります。

于 2013-10-09T13:36:46.410 に答える