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

Python跨目录导入模块失败求助:解决ModuleNotFoundError问题

解决Python模块导入失败:找不到'functions'模块

问题概述

项目目录结构中,modules/net/net.py 需要导入 functions/aws/get_vpc.py 中的模块,但运行脚本时触发 ModuleNotFoundError: No module named 'functions'。已在相关目录添加空 __init__.py,但 sys.path 中未包含项目根目录,导致Python无法定位到functions包。

可行解决方案

方案1:在脚本中动态添加项目根目录到sys.path

在net.py的最开头添加以下代码,将项目根目录手动加入Python的模块搜索路径:

import sys
import os

# 获取当前脚本的绝对路径
current_script_path = os.path.abspath(__file__)
# 从modules/net/net.py回溯两级到项目根目录
project_root = os.path.dirname(os.path.dirname(os.path.dirname(current_script_path)))
# 将项目根目录插入sys.path的最前面,确保优先搜索
sys.path.insert(0, project_root)

# 现在可以正常导入
from functions.aws import get_vpc

方案2:通过PYTHONPATH环境变量指定项目根

在运行脚本前,将项目根目录添加到PYTHONPATH环境变量中:

临时生效(单次运行)

# 切换到项目根目录
cd /Users/rbarrett/Git/Impinj-di/aws_network_design
# 设置PYTHONPATH并运行脚本
PYTHONPATH=$(pwd) python3 modules/net/net.py

永久生效(终端会话默认加载)

将以下内容添加到你的shell配置文件(如~/.zshrc或~/.bashrc):

export PYTHONPATH="/Users/rbarrett/Git/Impinj-di/aws_network_design:$PYTHONPATH"

执行source ~/.zshrc(或对应配置文件)使修改立即生效,之后直接运行脚本即可:

python3 modules/net/net.py

方案3:使用相对导入并以模块方式运行脚本

修改net.py中的导入语句为相对路径格式:

# ../../functions/aws 对应从当前目录(modules/net)向上两级到根目录,再进入functions/aws
from ...functions.aws import get_vpc

然后必须以模块方式运行脚本(不能直接执行net.py):

# 切换到项目根目录
cd /Users/rbarrett/Git/Impinj-di/aws_network_design
# 使用python -m 运行模块
python -m modules.net.net

原因说明

直接运行net.py时,Python默认将脚本所在目录(modules/net)加入sys.path,但不会自动包含项目根目录。因此即使functions目录有__init__.py,Python也无法找到这个包,必须手动将项目根目录加入搜索路径。

内容的提问来源于stack exchange,提问作者R. Barrett

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:15:41