Python本地导入报错:如何从src/data/compute_embeddings.py导入src/constants.py?
Python跨模块导入问题解决方案
项目结构
. ├── data │ └── raw │ └── sample.xlsx ├── __init__.py ├── notebooks │ └── clustering.ipynb └── src ├── constants.py ├── data │ ├── compute_embeddings.py │ └── __init__.py ├── embeddings.py └── __init__.py
问题说明
从src/data/compute_embeddings.py导入src/constants.py时遇到导入错误:
- 执行
python src/data/compute_embeddings.py时:导入方式 错误信息 from src.constants import ...ModuleNotFoundError: No module named 'src'from ..constants import ...ImportError: attempted relative import with no known parent package - 尝试模块方式运行
python -m src/data/compute_embeddings,报错No module named src/data/compute_embeddings。
不希望通过在脚本开头添加sys.path.append(...)解决,以下是合理方案:
方案1:使用正确的模块运行命令
模块运行需用点分隔符代替斜杠,在项目根目录执行:
python -m src.data.compute_embeddings
此时在compute_embeddings.py中可选择:
- 绝对导入:
from src.constants import ... - 相对导入:
from ..constants import ...
方案2:设置PYTHONPATH环境变量
在项目根目录执行对应系统的命令,将项目根目录加入Python路径:
- Linux/macOS:
export PYTHONPATH=$(pwd) - Windows(PowerShell):
$env:PYTHONPATH = Get-Location
设置完成后直接运行脚本即可:
python src/data/compute_embeddings.py
此时src会被识别为可导入模块,使用from src.constants import ...即可正常导入。
若要永久生效,可将上述命令添加到shell配置文件(如~/.bashrc、~/.zshrc)。
方案3:安装为可编辑包
在项目根目录创建pyproject.toml文件:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your-project-name" version = "0.1.0"
执行以下命令将项目安装为可编辑模式:
pip install -e .
安装后,src会被视为全局可导入的包,无论以哪种方式运行脚本,都可以使用from src.constants import ...完成导入。
内容的提问来源于stack exchange,提问作者Joris Limonier
相关产品推荐
相关产品推荐

