一日一技:如何防止 Homebrew 自动升级和自动清理过期程序

简介: 一日一技:如何防止 Homebrew 自动升级和自动清理过期程序

摄影:产品经理烤秋刀鱼

新版本的 Homebrew,在你使用brew install xxx或者brew upgrade xxx的时候,会自动检查你是否有过期的程序,以及最近30天你是否执行过brew cleanup。如果有过期的程序,那么它就会自动帮你升级。如果最近30天没有执行过brew cleanup,那么它就会帮你自动执行这一行代码。

神经病,脑子被狗吃了才能想出这种馊主意。

就是这个智障提的建议:`brew cleanup` should be run automatically · Issue #4760 · Homebrew/brew · GitHub[1] 大家去喷他。

这个机制,破坏了我电脑上Python 所有的虚拟环境。

我电脑上的 Python 是使用 Homebrew 安装的。假设一开始我安装的版本是3.7。它会被Homebrew 安装到/usr/local/Cellar/python3/3.7.6_1这种格式的路径下面。

然后我使用 Pipenv 基于这个 Python 创建了几十个虚拟环境。

由于Pipenv 是基于 Virtualenv 创建的虚拟环境,而 Virtualenv 在 macOS 和 Linux 下面,创建虚拟环境时,在虚拟环境里面用的是系统 Python 的软连接。而不是把系统 Python 的可执行文件复制到虚拟环境中。软连接相当于一个快捷方式,所以如果系统环境的 Python 没有了,虚拟环境下面的 Python 就无法使用,因为软连接连过去找不到目标。

当我在 Homebrew 中升级 Python 版本时,它会把新版本的 Python 下载下来,安装到另一个文件夹里面。然后修改/usr/local/bin/python这个软连接,指向新的 Python 版本的可执行文件。但不改动老版本的 Python。这样一来,虚拟环境依然可以使用老版本的 Python,代码不受影响。

但是当执行brew cleanup的时候,Homebrew 就会把这些老版本的程序删掉,从而导致虚拟环境损坏。

我原来一直是使用brew cleanup xxx这样可以指定清除具体某些软件。如果不指定具体软件的名字,就会删除所有已经安装了新版本的过期的软件。Homebrew 这个30天自动清理,就会执行这个操作。这种默认自动清理的机制,剥夺了用户的知情权。

说回来,如何防止 Homebrew 自动升级与自动清理过期软件呢?

我们可以添加两个环境变量:

export HOMEBREW_NO_AUTO_UPDATE=1
export HOMEBREW_NO_INSTALL_CLEANUP=1

其中,第一个环境变量的作用是防止Homebrew 擅自升级所有软件。第二个环境变量是防止自动清理。

你可以在每次执行 Homebrew 相关命令时执行这两行。或者把他们添加到~/.zshrc或者~/.bashrc中永久生效。

目录
相关文章
非常实用的清理buffcache小脚本
非常实用的清理buffcache小脚本
|
3月前
|
Kubernetes 监控 Go
一文讲懂服务的优雅重启和更新
一文讲懂服务的优雅重启和更新
|
3月前
|
Oracle 关系型数据库 测试技术
《Oracle数据库管理员的利器:一键自动清理过期日志脚本详解》
【8月更文挑战第13天】在Oracle数据库管理中,日志文件的积累是一个需谨慎处理的问题。日志文件对故障恢复至关重要,但也可能占用大量磁盘空间。本文提供一个自动清理日志的脚本,帮助维护数据库健康。脚本通过定义日志路径和保留天数,使用`find`命令查找并删除过期日志,同时记录清理操作。使用前,请确认日志路径正确,并根据备份策略设置保留天数。通过给予脚本执行权限和配置定时任务(如cron),可实现自动清理,保持文件系统整洁,避免因日志文件过多引发的问题。务必在理解脚本原理并做好备份的情况下使用。
47 0
|
4月前
|
Linux Shell
Centos定期自动清理临时文件
简单Shell脚本清理临时文件 使用`cron`设置定时任务,如每天8点运行: 记得调整路径和脚本名以匹配你的环境。
136 5
|
6月前
|
安全 Windows
【分享】Windows系统自动更新怎么永久停止?嘘!一般人我不告诉他,快进来看!
【分享】Windows系统自动更新怎么永久停止?嘘!一般人我不告诉他,快进来看!
370 2
|
6月前
|
存储 缓存 Linux
linux 自动定时清理缓存
linux 自动定时清理缓存
251 0
|
6月前
|
Linux
Linux日志自动清理方案
Linux日志自动清理方案
189 0
|
Linux Shell 调度
Linux 系统&自动清理日志实现脚本
1.删除文件命令:find 对应目录 命令选项
231 0
puppteer长时间运行定时清理缓存脚本
puppteer长时间运行定时清理缓存脚本
|
JavaScript 内存技术
nvm 切换版本失效?这个方法100%解决
NVM是一个工具,类似于一个“开关”,可以帮助我们在同一台电脑上安装和切换不同版本的Node.js
4550 1
nvm 切换版本失效?这个方法100%解决