Python:从 python 命名空间/包导入所有内容

标签 python namespaces package

全部。

我认为这个问题可以很容易地回答,但事实并非如此。只要我一直在寻找答案,我就一直认为我忽略了一些简单的事情。

我有一个具有以下包结构的 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/

相关文章:

delphi - 如何在同一个项目中针对不同版本的Delphi使用不同的包

python - OPENCV:以可变帧速率提取视频中帧的生命周期

python - 在Python中计算位图中两点之间的最短路径

PHP 命名空间和继承

django - 使用带命名空间的参数反转 'password_reset_done'

java - 包内包 Java

python - 如何在监听所有设备上的网络流量时识别数据包的接口(interface)?

python - 使用 python 解析 json 文件的目录

routes - Laravel 5 : how to put admin controllers in a folder?

java 。编译/执行 2 .java 1 包命令行