You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3版本自定义模块导入报错 如何实现Python2和Python3双版本兼容

问题根源

Python 3 默认启用绝对导入规则,util.py 中原有的 from config import CONTROL_VAR 会优先查找全局安装的config模块,而不是当前自定义config包下的config.py文件,因此导入失败。Python 2 默认优先相对导入,所以原有代码可以正常运行。

兼容Python2/3的修改方案

1. 修改 config/util.py 的导入语句

将原有导入改为显式相对导入即可对齐两个版本的导入规则:

# 替换原有 from config import CONTROL_VAR 行
from .config import CONTROL_VAR

if CONTROL_VAR == "A":
    VAR_ONE = "A1"
else:
    VAR_ONE = "B1"

2. 可选:补充config/__init__.py内容(更规范)

在包初始化文件中添加绝对导入声明,避免Python2环境出现导入歧义:

from __future__ import absolute_import

# 可选:统一导出常用变量,后续可直接通过 from config import CONTROL_VAR 导入
from .config import CONTROL_VAR
from .util import VAR_ONE

3. 极端情况适配:补充工作目录检索规则

如果运行时仍出现找不到包的报错,可以在my_script.py开头添加路径配置,保证自定义包能被Python检索到:

import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 原有导入逻辑不变
from config.config import CONTROL_VAR
from config.util import VAR_ONE

if __name__ == "__main__":
    print(CONTROL_VAR)
    print(VAR_ONE)

内容的提问来源于stack exchange,提问作者Ryag1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:09:05