2017-11-10 9 views
0

メイン関数のみを公開するようにコードをパッケージ化します。私は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.pyB.pyC.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を見つけたが、それはあなたがモジュール名強調して、インポートからモジュールの内部を非表示にすることができます私のため

答えて

0

を働いていない:

_yourmodulenamegoeshereを。

E: ます。また、パッケージの__init____all__を定義することができます - __all__からのみモジュール名はインポート*経由でインポートされます。

+0

パッケージの '__init__'で' __all__'がどのように動作するのか分かりません。あなたは私に例を挙げることができますか?ところで、 '_internal_modules'の強調表示は機能しませんでした。前回と同じエラー( 'my_module._internal_modules') –

+1

' __all__ = ['module1'、 'module2'] 'は' from package import * 'を実行した場合にのみモジュール1と2をインポートします。あなたが望むならば、あなたは依然としてパッケージの腸に直接アクセスすることができます。 _underscoredモジュールは 'import package'を実行した場合、デフォルトではインポートされませんが、同様に専用ユーザーが引き続きアクセスできます。 – jkm

関連する問題