是否能只写一份`requirements.txt`,确保`requirements.txt`和`setup.py`依赖的一致性?

45 阅读1分钟

网上已经很多写的比较清楚的了。这里分享一下我的疑惑以及遇到的坑

是否能只写一份requirements.txt,确保requirements.txtsetup.py依赖的一致性?

方法

例如hiyouga/LLaMA-Factory: Unify Efficient Fine-Tuning of 100+ LLMs (github.com)

commit_id: b2fc7ae

该项目就采用了这种方法,可能是嫌弃requirements.txtsetup中的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.txtsetup.py的定位后,我决定再改回,冗余就冗余吧