メイン関数のみを公開するようにコードをパッケージ化します。私はinternal_modules.B
からinternal_modules.A
ではなく、一部の操作をインポートするパッケージ内の実装モジュールとサブモジュールを隠す
./
setup.py
my_module/
__init__.py
public_functions.py
internal_modules/
__init__.py
A.py
B.py
other_modules.py/
__init__.py
C.py
public_functions
では、との両方A.py
とB.py
がC.py
から一部の機能を使用しています。私のディレクトリは、このようなものです。次のように
私setup.py
は次のとおりです。
from setuptools import setup
setup(name='my_module',
version='0.1',
description='my_awesome_module',
author='Me',
author_email='[email protected]',
license='MIT',
packages=['my_module'],
zip_safe=False)
私はピップでそれをインストールしたいが、私はそれがインストールされた後、私のパッケージからの私internal_modules
見えるのいずれかをさせないようにしたいです。
私はそれを正しくインストールすることができますが、私は
from my_module import public_module
を行うときには、public_module.py
の最初の行にImportError: no module named internal_modules.A
をスローします。
私は別のパッケージとして私setup.py
宣言にmy_module.internal_modules
を追加する場合、私はそれを修正することができます知っているが、これはA.py
とインストールパッケージから見えるB.py
と私のinternal_modulesが公衆ようになります。
私は同様の質問hereを見つけたが、それはあなたがモジュール名強調して、インポートからモジュールの内部を非表示にすることができます私のため
パッケージの '__init__'で' __all__'がどのように動作するのか分かりません。あなたは私に例を挙げることができますか?ところで、 '_internal_modules'の強調表示は機能しませんでした。前回と同じエラー( 'my_module._internal_modules') –
' __all__ = ['module1'、 'module2'] 'は' from package import * 'を実行した場合にのみモジュール1と2をインポートします。あなたが望むならば、あなたは依然としてパッケージの腸に直接アクセスすることができます。 _underscoredモジュールは 'import package'を実行した場合、デフォルトではインポートされませんが、同様に専用ユーザーが引き続きアクセスできます。 – jkm