全部。
我认为这个问题可以很容易地回答,但事实并非如此。只要我一直在寻找答案,我就一直认为我忽略了一些简单的事情。
我有一个具有以下包结构的 python 工作区:
MyTestProject
/src
/TestProjectNamespace
__init__.py
Module_A.py
Module_B.py
SecondTestProject
/src
/SecondTestProjectNamespace
__init__.py
Module_1.py
Module_2.py
...
Module_10.py
请注意,MyTestProjectNamespace 引用了 SecondTestProjectNamespace。
在 MyTestProjectNamespace 中,我需要导入 SecondTestProjectNamespace 中的所有内容。我可以使用以下语句一次导入一个模块:
from SecondTestProjectNamespace.Module_A import *
from SecondTestProjectNamespace.Module_B import *
...但是如果 SecondTestProject 有 50 个模块,则这是不切实际的。
Python 是否支持导入命名空间/包中所有内容的方法?任何帮助,将不胜感激。
提前致谢。
最佳答案
是的,您可以使用 pkgutil 进行此操作。
下面是一个示例,列出了twisted下的所有包(测试除外),并导入它们:
# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4
import pkgutil
import twisted
for importer, modname, ispkg in pkgutil.walk_packages(
path=twisted.__path__,
prefix=twisted.__name__+'.',
onerror=lambda x: None):
# skip tests
if modname.find('test') > -1:
continue
print(modname)
# gloss over import errors
try:
__import__(modname)
except:
print 'Failed importing', modname
pass
# show that we actually imported all these, by showing one subpackage is imported
print twisted.python
我必须同意其他发帖者的观点,即导入明星是一个坏主意。
关于Python:从 python 命名空间/包导入所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220977/