<p>包的<code>__init__.py</code>脚本可以执行导入包目录中的模块等操作</p>
<p>这意味着您可以这样做:</p>
<p><code>__int__.py</code>:</p>
<pre><code>import types as _types
def import_package_functions_named(funcname):
""" Dynamically imports all modules in this package directory and creates a
dictionary mapping the module's name to the target function if it exists.
"""
import traceback
import os
globals_, locals_ = globals(), locals()
registry = {}
for filename in os.listdir(__name__):
# Process all python files in directory that don't start with an underscore
# (this also prevents this module from importing itself).
if filename[0] != '_' and filename.split('.')[-1] in ('py', 'pyw'):
modulename = filename.split('.')[0] # Filename sans extension.
package_module = '.'.join([__name__, modulename])
try:
module = __import__(package_module, globals_, locals_, [modulename])
except:
traceback.print_exc()
raise
match = module.__dict__.get(funcname)
if isinstance(match, _types.FunctionType): # Ensure it's a function.
registry[modulename] = match
return registry
</code></pre>
<p>这将允许您在<code>main.py</code>脚本中获得所需的结果,因此:</p>
<pre><code>import scripts
result = scripts.import_package_functions_named("foo")
print(result)
</code></pre>
<p>样本输出:</p>
<pre class="lang-none prettyprint-override"><code>{'script1': <function foo at 0x027B30B8>, 'script2': <function foo at 0x027B33D0>, 'script3': <function foo at 0x027B3418>}
</code></pre>