1

そこで sを使用するのではなく__all__、最上位ファイルの属性を使用してサブパッケージをロードしたいのですが、残念ながら動作しません。__init__.pyimport

簡単な例を次に示します。

私は私のパッケージを持っています

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())

4

1 に答える 1