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

Python 3.6导入自定义包失败(已尝试多种解决方案)

解决ModuleNotFoundError: No module named 'src'的问题

问题根源

当你通过python src/start_script.py直接运行脚本时,Python会把脚本所在的src目录添加到sys.path的最前面,而不是项目根目录。这时候你在start_script.py里写import src.lib1,Python会去src目录下找名为src的子目录,自然找不到,所以抛出模块不存在的错误。

下面是几种可行的解决方案,你可以根据自己的项目需求选择:


方案1:修改导入语句(最简单直接)

因为start_script.py和lib1都在src目录下,属于同一个包层级,你可以直接导入lib1,不需要加src.前缀:

# start_script.py
import lib1

这种方法不需要修改脚本运行方式,适合小型项目或结构简单的场景。


方案2:以模块方式运行脚本(推荐的规范做法)

Python支持以包模块的方式运行脚本,这样会自动把项目根目录加入sys.path,符合Python的包结构规范。

步骤:

  1. 确保src目录下有__init__.py文件(哪怕是空文件),让src成为一个合法的Python包:
    project
    | +---- __init__.py
    | +---- src
    |      +---- __init__.py  # 新增这个文件
    |      +---- start_script.py
    |      +---- lib1
    | +---- run.sh
    
  2. 修改run.sh里的最后一行,从python src/start_script.py改成:
    python -m src.start_script
    

这样运行时,Python会把项目根目录加入sys.path,import src.lib1就能正常找到src包下的lib1模块了。


方案3:手动添加项目根目录到sys.path

如果你不想修改导入语句或运行方式,可以在start_script.py开头添加代码,把项目根目录绝对路径加入sys.path:

# start_script.py 开头添加
import os
import sys

# 获取当前脚本所在目录的绝对路径
current_script_dir = os.path.abspath(os.path.dirname(__file__))
# 获取项目根目录(当前脚本目录的父目录)
project_root = os.path.abspath(os.path.join(current_script_dir, '..'))
# 把项目根目录加入sys.path
sys.path.append(project_root)

# 现在可以正常导入了
import src.lib1

这种方法避免了相对路径的问题,不管脚本在哪个目录执行,都能正确找到项目根目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:46:39