2017-08-07 38 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

这将是一个可能的解决方案(如果没有更好的答案张贴我会这样做)。我仍然会等待最终更简单的解决方案。 –

相关问题