Python 导入模块数未知的子包
我正在构建一个包,它是API的包装器。我希望这个包装器能够尽可能地适应这个API的未来版本。出于这些原因,我有一个通用的Python 导入模块数未知的子包,python,import,Python,Import,我正在构建一个包,它是API的包装器。我希望这个包装器能够尽可能地适应这个API的未来版本。出于这些原因,我有一个通用的wrapper.py,它定义了一个通用的包装类,并让用户选择他们想要使用的API版本 API方法在每个API版本的versions子目录中的不同文件中定义。理论上有无限多个版本——我希望这是未来的证明 . └── MyApiWrapper ├── __init__.py ├── versions │ ├── __init__.py │ ├
wrapper.py
,它定义了一个通用的包装类,并让用户选择他们想要使用的API版本
API方法在每个API版本的versions
子目录中的不同文件中定义。理论上有无限多个版本——我希望这是未来的证明
.
└── MyApiWrapper
├── __init__.py
├── versions
│ ├── __init__.py
│ ├── v1.py
│ ├── v2.py
│ ├── v3.py
│ └── ...
└── wrapper.py
\uuuu init\uuuu.py
的内容都是空的。每个API版本v1.py
,v2.py
vN.py
定义一个Api
类
我的问题是在wrapper.py
中导入不同版本的API。因为我无法单独指定每个文件名,所以我希望导入版本
,然后从那里开始工作
最终目标是,我应该能够通过将相应的模块添加到versions
来添加新的API版本,而无需对wrapper.py
进行任何更改
我尝试了以下不同版本的wrapper.py
。请注意,这样做的目的是避免手动指定v1
、v2
等。但是,我在这里获取versions.v1
的值,作为导入的快速测试
导入MyApiWrapper
>>>打印(MyApiWrapper.versions.v1.Api)
AttributeError:模块“MyApiWrapper”没有属性“versions”
来自MyApiWrapper导入版本的>>
>>>打印(versions.v1.Api)
AttributeError:模块“MyApiWrapper.versions”没有属性“v1”
导入MyApiWrapper.versions
>>>打印(MyApiWrapper.versions.v1.Api)
AttributeError:模块“MyApiWrapper.versions”没有属性“v1”
导入MyApiWrapper
>>>从MyApiWrapper.versions导入*
>>>打印(MyApiWrapper.versions.v1.Api)
AttributeError:模块“MyApiWrapper.versions”没有属性“v1”
很明显,以下方法是可行的,但这不是未来的证明:
导入MyApiWrapper
>>>从MyApiWrapper.versions导入v1
>>>打印(MyApiWrapper.versions.v1.Api)
这也可以,但并不理想,因为我必须一个接一个地生成模块名:
导入导入库
>>>导入MyApiWrapper
>>>importlib.import_模块('.v1',MyApiWrapper.versions')
>>>打印(MyApiWrapper.versions.v1.Api)
如何从版本
子包导入所有模块而不指定其名称