温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Python how to alias module name (rename with preserving backward compatibility)
python python-2.7 import python-importlib

其他 - Python如何为模块名称添加别名(重命名以保持向后兼容性)

发布于 2020-03-27 11:14:00

我有一个名为的python包foo,可在导入中使用:

import foo.conf
from foo.core import Something

现在,我需要将foo模块重命名为其他名称,例如bar,所以我想这样做:

import bar.conf
from bar.core import Something

但我想保持与现有代码的向后兼容性,因此old(foo.)导入也应该可以正常工作,并且与bar.导入相同

如何在python 2.7中完成?

查看更多

查看更多

提问者
Mariusz Jamro
被浏览
117
ThinkChaos 2014-06-20 17:55

这迫使您保留一个foo目录,但是我认为这是使它生效的最佳方法。

目录设置:

bar
├── __init__.py
└── baz.py
foo
└── __init__.py

foo_bar.py

bar/__init__.py是空的。
bar/baz.pyworked = True

foo/__init__.py

import sys

# make sure bar is in sys.modules
import bar
# link this module to bar
sys.modules[__name__] = sys.modules['bar']

# Or simply
sys.modules[__name__] = __import__('bar')

foo_bar.py

import foo.baz

assert(hasattr(foo, 'baz') and hasattr(foo.baz, 'worked'))
assert(foo.baz.worked)

import bar
assert(foo is bar)