首页 > 解决方案 > Python 覆盖 3rd 方包单个文件

问题描述

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

认为。

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

压缩包

from xyz import abc
# some code

如何替换单行导入

# from 
from xyz import abc
# to 
from xyz.xy import abc

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

标签: pythonpython-3.x

解决方案


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


推荐阅读