覆盖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 之外的这一行
您可以使用包装函数覆盖builtins.__import__
,如果包名称等于'xyz'
,则包名称更改为'xyz.xy'
:
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
演示:https://repl.it/@blhsing/ComplicatedGrandUnits