如何重定向Python的import导入,解决Discord.py多版本包名冲突
Discord.py多版本导入冲突解决方案
可以通过__init__.py配合路径优先级调整实现需求,以下是可行操作方案:
方案1:调整导入路径优先级(无需修改修改版Discord.py源码)
操作步骤:
- 编辑
discord_py/__init__.py,添加以下代码:
import sys import os # 将当前discord_py目录加入导入路径的最高优先级 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
- 在
main.py中按如下顺序导入:
# 先导入discord_py触发路径调整 import discord_py # 此时导入的discord为discord_py下的修改版,优先级高于全局安装的原版 import discord
这个方案的原理是Python导入包时会按sys.path列表的顺序依次查找匹配的包,把修改版所在目录加到列表最前面就会优先被检索到。
方案2:修改修改版内部导入逻辑(无全局路径修改副作用)
如果不想全局调整sys.path,可以直接修改修改版Discord.py内部的导入语句,把所有绝对导入的import discord相关语句替换为相对导入:
- 原语句示例:
import discord.utils、from discord import Client - 替换后:
from . import utils、from . import Client
修改后修改版内部的导入会直接关联同目录下的代码,不会触发全局包检索,自然不会和原版冲突。
注意事项
- 如果需要同时使用两个版本的Discord.py,在导入完修改版后如果需要导入原版,需使用
importlib.util手动指定原版的安装路径导入,避免被调整后的路径优先级影响 - 不要将
discord_py目录放入Python的全局site-packages目录,避免造成全局导入污染
内容的提问来源于stack exchange,提问作者TehPirate
相关产品推荐
相关产品推荐

