使用 pip,我应该从 pip freeze 创建 requirements.txt,还是手动编辑 requirements.txt 文件?

Posted

技术标签:

【中文标题】使用 pip,我应该从 pip freeze 创建 requirements.txt,还是手动编辑 requirements.txt 文件?【英文标题】:With pip, should I create requirements.txt from pip freeze, or by manually editing the requirements.txt file? 【发布时间】:2022-01-12 21:48:54 【问题描述】:

对于上下文,我对 Python 了解不多,更不用说惯用的 Python。我正在做一个棕地项目。我所说的关于 docker 的一切可能与我要问的问题无关,但我不能说:我们的代码在 Docker 容器中运行。我们不使用虚拟环境,而是硬编码 Python 版本并在 Dockerfile 中运行:

ADD requirements.txt /
RUN pip install -r /requirements.txt \
&& rm -rf /requirements.txt 

目前,我们有两种向requirements.txt添加需求的方法:

    通过运行这个命令(以 twilio 为例):

    docker-compose run --rm django bash -c "pip install twilio && pip freeze > requirements.txt"
    

    通过访问 pypi.org,找到依赖项的名称和当前版本,然后将该行手动添加到主机 requirements.txt

两者似乎都有效,但我的直觉告诉我,其中一个/两个都有潜在的缺点。每种选择的优缺点是什么,哪一种被认为是惯用的?如果这些都不被认为是惯用的,那么添加到requirements.txt 的正确方法是什么?

我一直在谷歌上搜索,但很多结果都值得怀疑,因为它们确实很旧。例如,pip 20.3.2020 添加了解析器功能,我不知道这对最佳实践有什么影响。

【问题讨论】:

我对此没有答案,但是 pip freeze to requirements 给了我一些小的软件包安装问题并弄乱了它们的版本。所以,我会一直编辑 requirements.txt。 @TamilSelvan 你知道它为什么会给你这些问题吗? @DanielKaplan 两者:***.com/a/53935334/7976758 @phd 答案是在 pip 20.3.2020 之前写的 @DanielKaplan 好吧,还有什么?我写了那个答案,从那以后没有任何改变。我们仍然在工作中使用相同的 2 个requirements.txt 文件。 【参考方案1】:

requirements.txt 文件表示为使您的应用程序正确运行必须安装的所有依赖项。

运行 pip freeze 会将所有实际安装的库(开发、其他项目、已弃用等)转储到新创建的 requirements.txt 文件中。

手动添加依赖项是一种更可控的方式来列出您的依赖项。

我建议您在构建项目时手动将依赖项添加到文件中。如果您发现有些不需要,请将它们删除。使用pip freeze,也许其他二级库会保留。

【讨论】:

以上是关于使用 pip,我应该从 pip freeze 创建 requirements.txt,还是手动编辑 requirements.txt 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Python pip 从 pip freeze 的输出中找出基本要求

pip freeze 创建了一些奇怪的路径而不是包版本

是否可以使用 pip 模块在 python 3 项目中使用 cx_freeze ?

pip freeze 和 conda list 的区别

pip freeze vs pipreqs

pip freeze vs pipreqs