Python项目根目录多src目录与setup.py、pip install -e配置问题
解决双src目录的可编辑安装问题
首先先理清楚正确的项目结构,避免路径映射错误:
你的项目根目录/ ├── setup.py ├── src/ # 旧代码目录,对应原有导入路径 │ ├── weak_supervision/ │ │ ├── __init__.py # 必须有这个文件,标识为Python包 │ │ └── 你的旧代码文件.py └── src_math_evaporate/ # 新代码目录,独立包 ├── math_evaporate/ │ ├── __init__.py │ └── 你的新代码文件.py
方案一:明确映射包路径(推荐,适合包结构简单的情况)
修改setup.py,用package_dir把每个包映射到对应的src目录,同时在packages里列出所有要安装的包:
from setuptools import setup setup( name="你的项目名", version="0.1.0", # 包名: 实际所在路径 package_dir={ "weak_supervision": "src/weak_supervision", "math_evaporate": "src_math_evaporate/math_evaporate" }, # 列出所有要安装的包 packages=["weak_supervision", "math_evaporate"], # 按需添加其他配置,比如依赖 # install_requires=[...] )
方案二:自动查找多目录下的包(适合包较多的情况)
如果你的两个src目录下有多个子包,可以用find_packages自动识别,同时指定查找路径:
from setuptools import setup, find_packages setup( name="你的项目名", version="0.1.0", # 告诉setuptools,根包(空字符串对应的包)的查找目录是src和src_math_evaporate package_dir={"": ["src", "src_math_evaporate"]}, # 在这两个目录下查找所有包 packages=find_packages(where=["src", "src_math_evaporate"]), )
为什么你之前会报错?
你之前的package_dir配置应该是把weak_supervision的路径指向了src_math_evaporate/weak_supervision,但这个目录根本不存在——旧代码的weak_supervision其实在src目录下,所以路径映射完全错了,才会触发目录不存在的错误。
验证步骤
- 按上面的结构调整项目目录,确保每个包目录下都有
__init__.py - 修改
setup.py为上述任意一种配置 - 执行
pip install -e .,安装后测试导入:import weak_supervision # 旧代码包,导入路径不变 import math_evaporate # 新代码包,独立导入
内容的提问来源于stack exchange,提问作者Charlie Parker
相关产品推荐
相关产品推荐

