跨目录导入Python模块时遇ModuleNotFoundError的求助
解决Python跨目录导入ModuleNotFoundError问题
以下是针对你遇到的跨目录导入问题的几种可行解决方案,按实用性和适用场景排序:
方案一:临时添加主项目路径到Python搜索路径(快速测试)
在Testing/testing.py的最开头添加以下代码,将主项目目录手动加入Python的模块搜索路径:
import sys import os # 获取当前文件的父目录的父目录(即主项目目录) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
添加后即可正常使用你之前尝试的导入语句:
from Utilities.deck import Deck # 或者通过Utilities的__init__.py导出内容导入 from Utilities import Deck
方案二:使用相对导入(需以包形式运行)
利用Python的相对导入语法,在testing.py中使用:
from ..Utilities.deck import Deck
注意:不能直接在Testing目录下执行python testing.py,必须回到主项目目录,用模块方式运行测试文件:
# 主项目目录下执行 python -m Testing.testing
直接运行脚本时,脚本会被视为顶层模块,相对导入的层级关系会失效,因此必须用-m参数以包的形式启动。
方案三:将项目配置为可安装包(团队协作首选)
这种方式能彻底解决团队成员的导入路径不一致问题,步骤如下:
- 在主项目目录下创建
setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="your-project-name", # 替换为你的项目名称 version="0.1.0", packages=find_packages(), # 自动识别所有含__init__.py的子目录 )
- 团队所有成员在主项目目录下执行开发模式安装:
pip install -e .
安装完成后,无论在项目内哪个目录,都可以直接使用from Utilities.deck import Deck这类导入语句,无需额外配置路径。
方案四:设置PYTHONPATH环境变量(全局生效)
通过环境变量将主项目目录加入Python的模块搜索路径:
- Linux/Mac终端:进入主项目目录后执行
如果需要永久生效,可以将上述命令添加到export PYTHONPATH=$(pwd):$PYTHONPATH~/.bashrc或~/.zshrc文件中。 - Windows CMD:进入主项目目录后执行
set PYTHONPATH=%cd%;%PYTHONPATH% - Windows PowerShell:进入主项目目录后执行
$env:PYTHONPATH = "$(Get-Location);$env:PYTHONPATH"
设置完成后,直接运行testing.py也不会出现导入错误。
额外注意事项
- 你已添加的
__init__.py文件配置是正确的,无需修改;空白的__init__.py也可以满足包的标识需求。 - 团队协作时,优先推荐方案三,避免每个人手动配置路径带来的不一致问题。
内容的提问来源于stack exchange,提问作者Brandon Clarke
相关产品推荐
相关产品推荐

