我正在尝试为某人生成requirements.txt
以复制我的环境。你可能知道,标准方法是
pip freeze > requirements.txt
我注意到这将列出所有软件包,包括已安装软件包的依赖项,这使得这个列表不必要。然后我四处浏览,发现^{requirements.txt
中已安装的软件包
现在,根据我的理解,当有人试图用pip install -r requirements.txt
复制环境时,这将自动安装已安装包的依赖项
如果这是真的,这意味着使用pip-chill
而不是pip
来生成requirements.txt
是安全的。我的问题是,是否有任何其他风险会忽略使用pip-chill
的已安装软件包的依赖项,而我在这里缺少这些依赖项
在我看来
requirements.txt
文件应该列出所有依赖项、直接依赖项以及它们的依赖项(间接的、暂时的)。如果出于某种原因,只需要直接依赖项,那么有一些工具可以帮助实现这一点,从粗略的角度来看,pipchill似乎不够,因为它实际上没有查看代码来确定直接导入了哪些包。也许最好看看像pipreqs、pigar这样的项目,它们在计算实际的直接依赖关系时似乎更准确(基于代码中的导入)但是在一天结束的时候,你应该手工整理这些清单。在编写代码时,您要仔细选择要导入的包,同样要小心地整理包含这些包的项目(及其版本)列表。工具可以提供帮助,但开发人员更清楚
我相信在构建requirements.txt时,使用来自pip-tools的
pip-compile
是一个很好的实践。这将确保构建是可预测和确定的使用
pip-compile
命令可以从依赖项编译requirements.txt
文件,该文件在setup.py
或requirements.in
中指定以下是我建议的构建requirements.txt的步骤(如果使用requirements.in):
您的requirements.txt文件将包含:
您的应用程序应该始终使用从该生成的
requirements.txt
安装的依赖项。如果必须更新依赖项,则只需更新requirements.in
文件并重做pip-compile
。我相信这是一个比我看到有些人做的更好的方法我想使用它的主要优点是,您可以在一个单独的
requirement.in
文件中跟踪项目的实际直接依赖关系我发现这与使用
package.json
(requirements.in)和package-lock.json
(requirements.txt)在节点应用程序项目中管理节点模块/依赖项的方式非常相似相关问题 更多 >
编程相关推荐