擅长:python、mysql、java
<p>您正在描述stdlib<a href="https://docs.python.org/3/library/pkgutil.html#pkgutil.walk_packages" rel="nofollow noreferrer">^{<cd1>}</a>的基本用法,实际上非常类似于他们为动态发现模块而展示的文档化用例</p>
<p>在这里,它适用于您的示例项目:</p>
<pre><code>import importlib
import pkgutil
import scripts
submods = pkgutil.walk_packages(scripts.__path__, scripts.__name__ + ".")
result = {m.name: importlib.import_module(m.name).foo for m in submods}
</code></pre>
<blockquote>
<p>Suggestions of restructuring my project are also welcome.</p>
</blockquote>
<p>也许,您的项目更适合使用<a href="https://packaging.python.org/specifications/entry-points/" rel="nofollow noreferrer">entry-points</a>。每个子模块都可以将其<code>foo</code>注册为命名组中的入口点,然后您可以使用setuptools <a href="https://setuptools.readthedocs.io/en/latest/pkg_resources.html#entry-points" rel="nofollow noreferrer">^{<cd3>}</a>或<a href="https://entrypoints.readthedocs.io/en/latest/api.html#high-level-api" rel="nofollow noreferrer">^{<cd4>}</a>中的更高级别API对其进行迭代</p>