【发布时间】:2019-11-27 08:06:02
【问题描述】:
我有一个 python 包,它具有以下目录结构
package/
├── __init__.py
└── subpackage_A/
├── __init__.py
├── moduleA.py
└── moduleB.py
现在我想将subpackage_A 的名称更改为subpackage_B,同时保持旧名称可用,否则很多脚本会中断。所以这应该是可能的:
from package.subpackage_B import moduleA
from package.subpackage_B.moduleB import ClassB
# This should, if possible, display a deprecation warning
from package.subpackage_A import moduleA
我尝试将新包简单地导入名为 subpackage_A 的模块中,但这不起作用:
# File: package/subpackage_A.py
# This does not work:
from package.subpackage_B import * # Import everything from the new module
# This is also not working:
sys.modules[__name__] = __import__('package.subpackage_A')
如果脚本尝试从旧位置导入moduleA,则第一个版本会导致ModuleNotFoundError:
from package.subpackage_A import moduleA
Traceback (most recent call last):
...
ModuleNotFoundError: No module named 'package.subpackage_A.moduleA'
如何在不破坏向后兼容性的情况下重命名模块?该解决方案应适用于 python 3.5 及更高版本。
【问题讨论】:
-
import *解决方案遇到什么错误? -
尝试
moduleA形成旧位置的脚本会得到ModuleNotFoundError:ModuleNotFoundError: No module named 'package.subpackage_A.moduleA'。我在上面的问题中添加了错误消息。
标签: python python-3.x python-3.6 python-3.5