Homebrew 是 Mac 上最常用的软件包管理工具,可以简化 macOS 系统是的软件安装过程。但由于国内网络环境,每次更新时速度都不忍直视。为了提升速度和体验,建议修改为国内源。
目前有两个常用 Homebrew 源,分别是阿里镜像 和清华大学镜像 。其中清华镜像在阿里镜像已有的 brew
和 homebrew-core
之外,还额外提供了 homebrew-cask
源。所以我采用的策略是:brew
和 homebrew-core
使用阿里的,homebrew-cask
使用清华的,原因是阿里在程序员心目中的地位是要高于清华的。
直接复制以下命令在终端运行即可:
1 2 3 git -C "$(brew --repo)" remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git
没有安装使用 homebrew-cask
的情况下,最后一条命令会报错,可以忽略。
之后执行 brew update
使配置生效并测试工作是否正常。
Homebrew 还提供了一个核心组件 Homebrew-bottles ,可以提供一些包的二进制预编译版本,省去本地下载源码、编译源码的时间,提升安装效率,所以可以把 Homebrew-bottles
的源地址也进行替换,Homebrew-bottles
的地址是通过环境变量加载的,所以有两种修改方式:
临时生效:
1 export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles
永久生效(以 zsh
为例):
1 2 echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc source ~/.zshrc
Enjoy!
下边记录两个通过 homebrew 更新软件包后可能会出现的问题 更新 openssl 后新开命令行窗口报错 报错内容:
1 2 3 4 5 6 7 8 9 10 11 12 ERROR:root:code for hash md5 was not found. Traceback (most recent call last): File "/usr/local/Cellar/python@2/2.7.15_3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 147, in <module> globals()[__func_name] = __get_hash(__func_name) File "/usr/local/Cellar/python@2/2.7.15_3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 97, in __get_builtin_constructor raise ValueError('unsupported hash type ' + name) ValueError: unsupported hash type md5 ERROR:root:code for hash sha1 was not found. …… File "/usr/local/Cellar/mercurial/4.9/lib/python2.7/site-packages/hgdemandimport/demandimportpy2.py", line 151, in __getattr__ return getattr(self._module, attr) AttributeError: 'module' object has no attribute 'md5'
修复方法:
执行:ls /usr/local/Cellar/openssl
,可以看到当前可用的 openssl
版本:
1 2 3 ➜ ls /usr/local/Cellar/openssl 1.0.2o_1 1.0.2q
根据列出的版本,执行 brew switch openssl <版本号>
来指定版本(有可能在你本地只存在一个版本或和我这里有其他区别):
1 2 3 4 5 ➜ brew switch openssl 1.0.2q // 正常情况下会返回一下内容 Cleaning /usr/local/Cellar/openssl/1.0.2q Opt link created for /usr/local/Cellar/openssl/1.0.2q
问题解决~
更新 MySQL 后出问题 Python 程序在连接 MySQL 时,报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 Traceback (most recent call last): File "/Users/jiapan/.virtualenvs/bossku/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__ return self.wsgi_app(environ, start_response) …… …… …… File "/Users/jiapan/.virtualenvs/bossku/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 102, in dbapi return __import__('MySQLdb') File "/Users/jiapan/.virtualenvs/bossku/lib/python2.7/site-packages/MySQLdb/__init__.py", line 19, in <module> import _mysql ImportError: dlopen(/Users/jiapan/.virtualenvs/bossku/lib/python2.7/site-packages/_mysql.so, 2): Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib Referenced from: /Users/jiapan/.virtualenvs/bossku/lib/python2.7/site-packages/_mysql.so Reason: image not found
你的报错可能和我这里稍有区别,主要是倒数第三行,我这里是 libmysqlclient.20.dylib
,你那里可能是 libmysqlclient.18.dylib
或其他的,不过理论上都可以通过这个方法解决。
修复方法:
执行 ls /usr/local/lib | grep libmysqlclient
,我这里可以看到如下内容:
1 2 3 libmysqlclient.21.dylib -> ../Cellar/mysql/8.0.19/lib/libmysqlclient.21.dylib libmysqlclient.a -> ../Cellar/mysql/8.0.19/lib/libmysqlclient.a libmysqlclient.dylib -> ../Cellar/mysql/8.0.19/lib/libmysqlclient.dylib
查看列表中有没有和报错中完全相同的文件,如果存在完全匹配的就直接建立对应软链到 /usr/local/opt/mysql/lib/
,没有的话就用 libmysqlclient.dylib
代替。
我这里没有 libmysqlclient.20.dylib
,所以我使用的命令如下:
1 ln -s /usr/local/lib/libmysqlclient.dylib /usr/local/opt/mysql/lib/libmysqlclient.20.dylib
问题解决~
参考: