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

Python跨目录导入失败求助:寻求非绝对路径实现方案

问题原因与解决方案

核心问题

你的代码结构里,src目录未被Python识别为可导入的包,测试脚本的执行路径不在模块搜索范围内,导致找不到containers模块;同时containers.py里的导入写法依赖当前工作目录,健壮性不足。

解决步骤

1. 将src转为Python包

在src目录下创建空的__init__.py文件,让Python把它识别为合法包:

/project
├── /src
│   ├── __init__.py  # 新增空文件
│   ├── /services
│   │   ├── __init__.py  # 可选,也可添加
│   │   └── service1.py
│   └── containers.py
...

2. 修正导入语句

修改containers.py为绝对导入,摆脱对工作目录的依赖:

from dependency_injector import containers, providers
from src.services.service1 import DataService  # 改为绝对路径导入

class Container(containers.DeclarativeContainer):
    data_service = providers.Factory(DataService)

同时调整test_service1.py的导入路径:

import pytest
from src.containers import Container  # 从src包导入目标模块

data_service = Container.data_service()

3. 让Python识别src包(二选一即可)

方式一:设置PYTHONPATH环境变量

进入/project目录,执行对应系统的命令:

  • Linux/macOS:
    export PYTHONPATH=$(pwd):$PYTHONPATH
    pytest tests/services-tests/test_service1.py
    
  • Windows(命令提示符):
    set PYTHONPATH=%cd%;%PYTHONPATH%
    pytest tests/services-tests/test_service1.py
    

方式二:可编辑安装项目(推荐)

在/project目录下创建pyproject.toml文件:

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "your-project-name"
version = "0.1.0"
packages = ["src"]

执行命令将项目安装为可编辑模式:

pip install -e .

之后无论在哪个目录运行测试,都能正确导入src下的模块。

4. (可选)优化测试执行

在/project目录下创建pytest.ini文件,自动配置Python路径:

[pytest]
testpaths = tests
pythonpath = src

后续直接运行pytest即可,无需手动设置环境变量。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:02:20