如何在不修改main.py的情况下动态路由Python模块导入?
实现动态模块路由的方案
你可以通过在src目录下新增包结构和配置文件来实现路由逻辑,无需修改main.py,具体步骤如下:
1. 调整目录结构
在src下创建module目录,并在其中添加__init__.py,最终目录结构如下:
src ├── main.py ├── module │ └── __init__.py ├── module1 │ └── lib.py ├── module2 │ └── lib.py └── __init__.py
2. 编写src/__init__.py
这个文件仅需存在即可,无需写入任何内容,作用是让src成为Python可识别的包。
3. 编写src/module/__init__.py
在这个文件中读取环境变量,动态导入对应模块的lib并对外暴露,代码如下:
import os import importlib # 读取环境变量,默认值设为1避免无配置时出错 module_id = os.getenv("MODULE", "1") # 动态导入目标module下的lib模块 target_lib = importlib.import_module(f"src.module{module_id}.lib") # 将目标lib的所有属性同步到当前module的命名空间,保证main.py的导入逻辑正常工作 __dict__.update(target_lib.__dict__)
验证方法
- 设置环境变量
export MODULE=1后运行main.py,会自动导入src.module1.lib - 设置
export MODULE=2后运行,则导入src.module2.lib
所有路由逻辑都在src内部的包结构中实现,完全不需要修改原有的main.py或其他代码文件。
内容的提问来源于stack exchange,提问作者Montenegrodr
相关产品推荐
相关产品推荐

