如何导入Python模块并保留原引用db.connection?
解决模块路径变更后保留旧引用的问题
问题回顾
原本模块路径为db/connection.py,使用import db.connection导入,调用方式为db.connection.open_connection();现在模块移至project/db/connection.py,希望保留db.connection的引用方式,无需修改调用代码。
可行解决方案
1. 使用模块别名(最简单直接)
修改导入语句为:
import project.db as db
或者更精准地导入子模块:
import project.db.connection as db_connection
之后调用db.connection.open_connection()的代码完全不用改动,因为db现在指向project.db模块,db.connection自然对应新路径下的模块。
2. 通过sys.modules映射旧模块名(完全不修改原有导入语句)
在项目的入口文件(如启动脚本、主模块)中添加以下代码:
import sys from project import db as project_db # 将旧模块名映射到新模块对象 sys.modules['db'] = project_db sys.modules['db.connection'] = project_db.connection
这样后续任何模块执行import db.connection时,Python都会直接返回新路径下的模块对象,原有导入和调用代码无需做任何修改。
3. 创建过渡模块(适合长期兼容场景)
在项目根目录新建db文件夹,并在其中创建__init__.py文件,写入:
import sys from project import db as _db # 同步新模块的所有公开属性 __all__ = _db.__all__ for attr in dir(_db): if not attr.startswith('_'): setattr(sys.modules[__name__], attr, getattr(_db, attr)) # 确保子模块可被导入 from project.db import connection
这样原来的import db.connection会自动指向project.db.connection,完全兼容旧的调用方式,同时符合Python模块的结构规范。
关于from project import db.connection报错的原因
Python的from ... import语法不支持点号嵌套的模块路径写法,正确的写法应为from project.db import connection或from project import db后再引用db.connection。
内容的提问来源于stack exchange,提问作者g00dds
相关产品推荐
相关产品推荐

