重写python任何第三方包装单个文件的最佳方法是什么?
假设。
我有一个名为 foo 的软件包。 Foo包含具有导入行的文件tar.py。
tar.py
from xyz import abc
# some code
如何替换单行导入
# from
from xyz import abc
# to
from xyz.xy import abc
我想在python项目的virtualenv外部更改此行
答案 0 :(得分:6)
您可以使用包装函数覆盖builtins.__import__
,如果该包装名等于'xyz.xy'
,则将包装名称更改为'xyz'
:
def my_import(name, *args, **kwargs):
if name == 'xyz':
name = 'xyz.xy'
return original_import(name, *args, **kwargs)
import builtins
original_import = __import__
builtins.__import__ = my_import
from foo import tar