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

Python包安装后导入正常 直接运行源码报相对导入错误是什么原因

错误原因

  • 直接运行python3 car.py时,Python会把当前运行的脚本所在的目录(也就是src/package_name/)加到sys.path中,同时将该脚本的__name__属性设为__main__,而非它原本的完整模块名package_name.car。此时Python无法识别该脚本属于package_name父包,相对导入语法from .func import *中的.找不到对应的父包层级,就会抛出该错误。
  • 从PyPI安装包后使用时,你是通过import package_name.car这类方式导入模块,Python的包索引机制可以正确识别package_name是顶层包,car是包下的子模块,相对导入的层级关系可以被正常解析,因此不会报错。

解决方法

方案1:以模块方式运行脚本

不要直接运行.py文件,切换到项目根目录(也就是proj/目录)下执行以下命令即可:

python3 -m package_name.car

这种运行方式会把当前工作目录加入sys.path,同时保留模块的完整层级命名,相对导入可以被正常识别。

方案2:修改导入逻辑适配直接运行

如果需要经常直接运行car.py,可以把相对导入改为绝对导入,同时把src目录加入Python路径:

  1. 把car.py里的导入语句修改为:
from package_name.func import *
  1. 运行时指定PYTHONPATH环境变量,在proj/目录下执行:
PYTHONPATH=./src python3 src/package_name/car.py

也可以在car.py最开头手动添加路径:

import sys
from pathlib import Path
# 把src目录加入Python路径
sys.path.append(str(Path(__file__).parent.parent.resolve()))
# 后续再写导入语句
from package_name.func import *

方案3:新增独立入口脚本

在项目根目录下新增单独的启动脚本,比如run_car.py,内容如下:

from package_name.car import 要执行的入口函数

if __name__ == "__main__":
    要执行的入口函数()

之后直接在proj/目录下运行python3 run_car.py即可,不需要修改原有包内的导入逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:24:06