Python3使用requirements.txt时,如何在源码中实现绝对导入?
问题:运行Python项目时出现
ModuleNotFoundError: No module named 'src' 项目详情
目录结构
my_project | |_venv/ | |_requirements.txt | |_src | |_main.py | |_input_data.py
文件内容
requirements.txt:
numpy pydantic
src/input_data.py:
class A: name = "a1"
src/main.py:
from src.input_data import A print(f"{A.name}")
报错信息
执行pip install -r requirements.txt安装依赖后,运行python src/main.py出现以下错误:
Traceback (most recent call last): File ".../my_project/src/main.py", line 1, in <module> from src.input_data import A ModuleNotFoundError: No module named 'src'
无需修改目录结构的解决方案
方案1:临时设置PYTHONPATH环境变量
在my_project根目录下执行命令,将当前目录添加到Python的模块搜索路径:
- Linux/macOS:
或先设置环境变量再运行:PYTHONPATH=$(pwd) python src/main.pyexport PYTHONPATH=$(pwd) python src/main.py - Windows(CMD):
set PYTHONPATH=%cd% python src/main.py - Windows(PowerShell):
$env:PYTHONPATH = Get-Location python src/main.py
方案2:改用模块方式运行并调整导入语句
- 修改
src/main.py的导入语句为相对导入:from .input_data import A print(f"{A.name}") - 在
my_project根目录下执行模块运行命令:
该方式会自动将当前目录加入模块搜索路径,Python会识别python -m src.mainsrc为合法包。
方案3:添加__init__.py并保留原导入语句
- 在
src目录下创建空的__init__.py文件,标记src为Python包:touch src/__init__.py # Linux/macOS # Windows可手动创建空文件 - 在
my_project根目录下用模块方式运行:
此时python -m src.mainmain.py中原导入语句from src.input_data import A可正常生效。
内容的提问来源于stack exchange,提问作者aura
相关产品推荐
相关产品推荐

