そこで sを使用するのではなく__all__
、最上位ファイルの属性を使用してサブパッケージをロードしたいのですが、残念ながら動作しません。__init__.py
import
簡単な例を次に示します。
私は私のパッケージを持っています
pdbsr/
__init__.py*
...
extras/
__init__.py
...
*
このアスタリスクは、__init__
以下で話しているファイルを強調表示する必要があります。
だから私がラインを置くとき
import extras
__init__.py
ファイルに、すべてが正常に動作します。インタープリターでモジュールをテストすると、次の応答が返されます。これは、モジュールが正常にロードされたことを示しています。
>>> import pdbsr
>>> pdbsr.extras
<module 'pdbsr.extras' from '.../site-packages/pdbsr/extras/__init__.pyc'>
新しい python シェルimport extras
で、__init__.py
ファイル内の を
__all__ = ["extras"]
問題があります:
>>> import pdbsr
>>> pdbsr.extras
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'extras'
>>> extras
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'extras' is not defined
を介してサブパッケージをロードするために私がしなければならないことを誰かが知っています__all__
か?
編集:
上記の非常に悪い例をお詫び申し上げます。そのため、最初に考えたのは、__init__.py
ファイルを単純化できるということでした。例えば、今私は
`from pdbfile.new_pdb import *`
`from pdbfile.[...] import *`
`from pdbfile.[...] import *`
など。.py
サブパッケージごとに多くのファイルがあるため、__init__
ファイルが非常に大きくなります。
たとえば、 pdbsr/pdb_file/new_pdb には class が含まれNewPdb()
ており、インタープリターで呼び出すことができます
>>> import pdbsr
>>> new = pdbsr.NewPdb()
( のようなドット表記は避けたいpdbsr.new_pdb.NewPdb()
)