2017-08-07 13 views
2

プロジェクト以下の構造を有する:モジュールの全ての機能を取得

modulename 
├── __init__.py 
│ 
├── one 
│ ├── function_1.py 
│ ├── function2.py 
│ └─── __init__.py 
│ 
└── two 
    ├── another_function.py 
    ├── yet_another_function.py 
    └─── __init__.py 

.py(空である__init__.py」sは除く)の線に沿ってコンテンツがあります

def foo(x): 
    return x 

def bar(x): 
    return x + 2 

への次の方法でモジュールをインポートしてください:import modulename.one.function1.foo。私がやりたいことは、function1またはanother_functionのように、最後の2番目のファイル名がすべて.pyであることです。

提案ソリューションは、これまで失敗してきました:['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']になり

  • dir(modulename.one)

  • help(modulename.one)実際には、機能ファイルの名前はPACKAGE CONTENTSの下に含まれています。 PACKAGE CONTENTSのリストを入手するにはどうすればよいですか?

EDIT:(誰かが示唆したように)私は__init__.py年代の__all__使用することができますが、私は、単純な組み込み関数やモジュールを好むだろう。

答えて

0

あなたが探しているのは、パッケージの__all__定義です。パッケージで__all__動作を説明http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html

あなたが見てみることができます。

+0

それはうまくいくようですが、自分で '__all__'を書かなければならないと理解していますか?それとも私は誤解しましたか?私はプログラム的に見つけ出す方法があれば好きです。 –

+0

はい、あなたは '__all__'をあなた自身で書く必要があります。しかし、 '__init __。py'はpythonモジュールであるため、glob.globとimportlib.import_moduleを使用してコードを実装することができます。 – Martin

+0

それは可能な解決策になります(そして、より良い回答が投稿されなければ私はそれを行います)。私はまだ最終的な単純な解決策を待っています。 –

関連する問題