通过自定义Shell命令创建和同步更新仅含指定安装包及其版本信息的requirements.txt
常见的环境复现/迁移方案
pip freeze
包含了当前环境所包含的全部依赖包信息,影响复现者对主次依赖的判断;export yml
通过创建 yaml 文本实现环境打包,包含pip
指定包安装及相关依赖信息,但存在跨平台问题;- 以及其他
--from-history
等 flag 都旨在解决相关问题;
动机
根据实际的包安装过程生成一种具有高可读性的 requirements.txt
环境依赖包文本,严格按照安装先后排序,只列举指定安装包及其版本信息。
解决方案
通过自定义 pip-install
及 pip-uninstall
shell command 替代原有的 pip install/uninstall
安装包工作流,并对 requirements.txt
进行同步更新:
pip-install
command (BSD & GNU)
function pip-install() {
# loop through all listed requirements
for var in "$@"
do
# attempt to install it
pip install $var
# add it to the requirements.txt file
pip freeze | grep -i "^$var=" >> requirements.txt
done
# remove duplicates in the requirements.txt
awk -i inplace '!a[$0]++' requirements.txt
}
pip-uninstall
command (GNU请先阅读)
function pip-uninstall() {
for var in "$@"
do
pip uninstall $var
# for macOS (BSD Unix)
# for GNU distribution using sed instead.
gsed -i "/$var==./d" requirements.txt
# i.e. GNU: sed -i ...
done
}
如何使用
- 通过编辑器打开
~/.zshrc
或~/.bashrc
配置文件; - 将以上函数放入;
- 保存并
source
配置文件; - 打开
terminal
进行测试:$ pip-install/pip-uninstall
;