2017-08-07 23 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的其是空的)具有沿行內容:

def foo(x): 
    return x 

def bar(x): 
    return x + 2 

要使用您以如下方式導入它的模塊:import modulename.one.function1.foo。我想要做的是在倒數第二位找到所有.py文件名,例如function1another_function

建議的解決方案至今沒有成功過:

  • dir(modulename.one)導致['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']

  • help(modulename.one)它實際上包含標題爲PACKAGE CONTENTS下的功能文件名稱。我如何獲得PACKAGE CONTENTS的列表?

編輯:我可以(如有人建議)使用在__init__.py__all__,但我寧願一個簡單的內置功能或模塊。

回答

0

我覺得你要找的是__all__定義在你的包__init__文件中。

你可以看看:http://mikegrouchy.com/blog/2012/05/be-pythonic-__init__py.html

這也解釋了在包__all__行爲。

+0

這似乎是可行的,但據我瞭解,你必須自己寫'__all__'?或者我誤解了?我寧願如果有一種方式來找出編程。 –

+0

是的,你必須自己寫'__all__'。但是,由於'__init __。py'是一個python模塊,因此可以使用glob.glob和importlib.import_module來填充代碼。 – Martin

+0

這將是一個可能的解決方案(如果沒有更好的答案張貼我會這樣做)。我仍然會等待最終更簡單的解決方案。 –

相關問題