网上已经很多写的比较清楚的了。这里分享一下我的疑惑以及遇到的坑
是否能只写一份requirements.txt,确保requirements.txt和setup.py依赖的一致性?
方法
例如hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs (github.com)
commit_id: b2fc7ae
该项目就采用了这种方法,可能是嫌弃requirements.txt和setup中的install_requires重复了(我也认为这挺重复的),该项目在setup.py里获取依赖的方式如下:
def get_requires():
with open("requirements.txt", "r", encoding="utf-8") as f:
file_content = f.read()
lines = [line.strip() for line in file_content.strip().split("\n") if not line.startswith("#")]
return lines
这样一般情况下不会造成什么影响,于是我将这种方法用到了自己包上,
结果使用下面命令在构建包的时候会出错
py -m build # windows
报错信息为
FileNotFoundError: [Errno 2] No such file or directory: 'requirements.txt'
原因
在打包过程中,build模块会从源码拷贝一份到临时目录下进行打包,在拷贝的规则里,requirements.txt文件被过滤了
当然,也可以想办法获取到requirements.txt,这个还是比较麻烦的。
结论
在详细了解requirements.txt和setup.py的定位后,我决定再改回,冗余就冗余吧