执行pip install -r requirements.txt因-e .报错,需保留该参数求解决方案
问题:保留requirements.txt中的
-e .时pip安装依赖失败 报错详情
执行pip install -r requirements.txt时出现以下错误:
× python setup.py egg_info did not run successfully. │ exit code: 1 ╰─> [3 lines of output] error in ML_Project setup command: 'install_requires' must be a string or list of strings containing valid project/version requirement specifiers; Expected package name at the start of dependency specifier -e . ^ [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. error: metadata-generation-failed × Encountered error while generating package metadata. ╰─> See above for output. note: This is an issue with the package mentioned above, not pip. hint: See above for details
相关文件内容
requirements.txt
pandas numpy seaborn -e .
setup.py
from setuptools import setup, find_packages from typing import List HYPEN_E_DOT = "-e ." def get_requirements(file_path: str) -> List[str]: ''' This function will return the list of requirements from the requirements.txt file ''' requirements = [] with open(file_path) as file_obj: requirements = file_obj.readlines() requirements = [req.replace("\n", " ") for req in requirements] if HYPEN_E_DOT in requirements: requirements.remove(HYPEN_E_DOT) return requirements setup( name='ML_Project', version='0.0.1', author='author', author_email= 'author@gmail.com', packages=find_packages(), install_requires= get_requirements('requirements.txt') )
解决方案
问题根源在于setup.py的get_requirements函数处理换行时,将-e .变成了-e . (末尾带空格),导致无法匹配HYPEN_E_DOT="-e .",最终把-e . 传入了install_requires参数——而install_requires只接受合法的依赖包名,不支持-e .这种pip可编辑安装指令。
修改get_requirements函数的处理逻辑即可保留requirements.txt中的-e .:
def get_requirements(file_path: str) -> List[str]: ''' This function will return the list of requirements from the requirements.txt file ''' requirements = [] with open(file_path) as file_obj: requirements = file_obj.readlines() # 替换换行符为空白,去除前后空格,并过滤空行 requirements = [req.strip() for req in requirements if req.strip()] if HYPEN_E_DOT in requirements: requirements.remove(HYPEN_E_DOT) return requirements
修改后,函数会正确识别并移除-e .,确保install_requires只包含pandas、numpy、seaborn这些合法依赖;同时requirements.txt中的-e .依然会被pip识别,实现项目的可编辑模式安装。
内容的提问来源于stack exchange,提问作者Harsh Tyagi
相关产品推荐
相关产品推荐

