Python覆盖第3方包单个文件

c.g*_*rey 5 python python-3.x

覆盖 python 任何 3rd 方包单个文件的最佳方法是什么?

认为。

我有一个名为foo的包。Foo 包含文件 tar.py,其中有一个导入行。

tar.py

from xyz import abc
# some code
Run Code Online (Sandbox Code Playgroud)

我如何替换单行导入

# from 
from xyz import abc
# to 
from xyz.xy import abc
Run Code Online (Sandbox Code Playgroud)

我想在 python 项目中的 virtualenv 之外更改这一行

blh*_*ing 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
Run Code Online (Sandbox Code Playgroud)

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