Python覆盖第三方软件包单个文件

时间:2019-12-26 07:18:29

标签: python python-3.x

重写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外部更改此行

1 个答案:

答案 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

演示:https://repl.it/@blhsing/ComplicatedGrandUnits