Pip 如何在安装新软件包时自动更新需求文件?
通过Pip 如何在安装新软件包时自动更新需求文件?,pip,requirements.txt,virtual-environment,Pip,Requirements.txt,Virtual Environment,通过pip freeze跟踪虚拟环境的需求非常简单 pip freeze>requirements.txt 但是,当前,每当新包添加到venv时,都需要手动将其添加到需求文件中。为此,我通常只需再次运行freeze命令并将其导入需求文件,但有时我会忘记运行此命令,这可能会很麻烦,尤其是在不同位置的存储库中,每当我需要记住需要安装哪些软件包时 每当在虚拟环境中安装新软件包时,是否有办法自动更新requirements.txt文件以包含此新软件包?使用PIPNV代替pip 它是一个更好的依赖性管理
pip freeze
跟踪虚拟环境的需求非常简单
pip freeze>requirements.txt
但是,当前,每当新包添加到venv
时,都需要手动将其添加到需求文件中。为此,我通常只需再次运行freeze命令并将其导入需求文件,但有时我会忘记运行此命令,这可能会很麻烦,尤其是在不同位置的存储库中,每当我需要记住需要安装哪些软件包时
每当在虚拟环境中安装新软件包时,是否有办法自动更新
requirements.txt
文件以包含此新软件包?使用PIPNV代替pip
它是一个更好的依赖性管理器,它将确保最佳实践并消除手工工作
要了解pipenv的使用,请阅读本文
仅使用普通
pip
安装软件包时,目前无法使其自动生成或更新requirements.txt文件。它仍然是一个使用pip freeze>requirements.txt
的手动过程
如果目的是确保正确跟踪或注册已安装的软件包(即在存储库的版本控制中跟踪),则必须使用其他工具“包装”pip的功能
你有两个选择
选项1:使用包管理器
有许多Python包管理器将“安装包”与“在某处记录已安装的包”结合起来
-
- “它会自动为您的项目创建和管理virtualenv,并在您安装/卸载软件包时从
中添加/删除软件包。它还会生成非常重要的Pipfile
,用于生成确定性版本Pipfile.lock
- 工作流程(请参阅)
$pipenv安装一些软件包 $cat Pipfile ... [套餐] 某些包=“*” #提交修改后的Pipfile和Pipfile.lock $git添加文件* #在repo的其他副本上,安装Pipfile中的东西 $pipenv安装
- “它会自动为您的项目创建和管理virtualenv,并在您安装/卸载软件包时从
-
- “poetry是一种处理依赖项安装以及Python包的构建和打包的工具。它只需要一个文件就可以完成所有这些:新的、标准化的
。换句话说,poetry使用pyproject.toml
替换pyproject.toml
、setup.py
、requirements.txt
、setup.cfg
和新添加的MANIFEST.In
”Pipfile.
- 工作流程(请参阅)
添加请求 $cat pyproject.toml ... [工具、诗歌、依赖性] 请求=“*” #提交修改后的pyproject.toml $git add pyproject.toml #在repo的其他副本上,安装Pipfile中的东西 $POYMENT安装
- “poetry是一种处理依赖项安装以及Python包的构建和打包的工具。它只需要一个文件就可以完成所有这些:新的、标准化的
.git/hooks/pre-commit
:
!/usr/local/bin/bash
pip冻结>要求检查.txt
cmp—静默需求\u check.txt requirements.txt
如果[$?-gt 0];
然后
echo“环境中存在不在requirements.txt中的包”
回显“中止提交”
rm需求检查.txt
出口1
fi
rm需求检查.txt
出口0
输出:
$git状态
...
没什么要承诺的,正在清理树
$pip安装pydantic
$git add。
$git提交
pip冻结的输出与requirements.txt不同
中止提交
$pip freeze>requirements.txt
$git add。
$git commit-m“updaterequirements.txt”
[master 313b685]更新要求.txt
1个文件已更改,1个插入(+)
使用一些很棒的建议。当我需要这些工具时,我一定会把它放在手边!