Python项目导入src模块报错ModuleNotFoundError的解决求助
解决Docker Compose创建PostgreSQL数据库的事务错误
- 问题原因:PostgreSQL官方镜像会将初始化脚本包裹在事务中执行,而
CREATE DATABASE命令不允许在事务内运行,导致报错。 - 解决方案:
- 直接用环境变量指定初始数据库:在docker-compose.yml里给postgres服务添加
POSTGRES_DB环境变量,镜像会自动创建这个数据库,无需手动执行CREATE DATABASE命令。示例配置:version: '3.8' services: postgres: image: postgres environment: POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword POSTGRES_DB: mydb # 自动创建目标数据库 ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data: - 自定义初始化脚本规避事务:若需创建多个数据库,将初始化脚本放在
docker-entrypoint-initdb.d目录下(命名为.sql后缀),脚本开头添加\set ON_ERROR_STOP on避免事务包裹。示例init-db.sql:
再在docker-compose.yml中挂载该脚本:\set ON_ERROR_STOP on CREATE DATABASE mydb; -- 其他初始化命令(如创建表、用户等)services: postgres: # 其他配置保持不变 volumes: - ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql - postgres_data:/var/lib/postgresql/data
- 直接用环境变量指定初始数据库:在docker-compose.yml里给postgres服务添加
解决测试文件导入
src模块的错误 - 问题原因:Python解释器运行测试时,未将项目根目录加入模块搜索路径(PYTHONPATH),导致无法识别
src模块。 - 解决方案:
- 临时设置PYTHONPATH:运行测试前在终端执行命令,将项目根目录加入环境变量:
# Linux/macOS export PYTHONPATH=$(pwd) pytest # Windows(PowerShell) $env:PYTHONPATH = $(Get-Location) pytest - 在conftest.py中动态添加路径:在项目根目录的
conftest.py开头添加以下代码,手动将根目录加入搜索路径:import sys from pathlib import Path project_root = Path(__file__).parent sys.path.append(str(project_root)) - 用配置文件声明项目结构:在项目根目录创建
pyproject.toml,指定src为源码目录,让pytest自动识别:
或者配置setuptools并安装为可编辑模式:[tool.pytest.ini_options] pythonpath = ["src"]
执行安装命令:[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 .
- 临时设置PYTHONPATH:运行测试前在终端执行命令,将项目根目录加入环境变量:
内容的提问来源于stack exchange,提问作者Bruno Henrique Peixoto
相关产品推荐
相关产品推荐

