mac用brew更新python的正确方法是啥?

如图,我已经有3个版本的python的site-packages了。

每次更新python后,原来pip3安装的module都需要重新安装一次。

难道需要我手动把上个版本的pip3安装的module拷贝一下吗?

我的建议是别用 Homebrew 装的 Python,如果有别的依赖就让它们在那就好了

可能的几个方案:

  1. 使用系统的 /usr/bin/python3
  2. 使用 pyenv,conda 等管理的 Python
  3. 使用 pipx 安装系统/全局需要的 packages

另外一些 Homebrew 有的 package 可以考虑用 Homebrew 装

3 个赞

是的。conda,pipenv,poetry之类的python环境管理工具其实都可以用homebrew装。

如果只是要使用python写的app,而不说调用python库,那倒是可以直接用brew装。

嗯嗯,我知道可以通过 brew 装,主要想要强调的是用他们装的 python,而不是 homebrew 自己的

但是系统的python3是比较老的版本了啊。

我用python主要是emacs的一些包有python依赖。

而且十分无语的一点,我到现在都不太懂为什么所谓的更新python,是重新下载一个python,这样导致电脑越来越多python的版本。

感谢回答,我先尝试一下pyenv看看。

可以用 python 自带的 venv , 配合 Emacs 包 pyvenv,项目用到的包就用 venv 管理,在 Emacs 中要用的时候用 pyvenv 激活。

全局就安装少量工具包

1 个赞

3.9.6 怎么都不算老吧,如果还要更新的可以看看 pyenv。

本质上 brew install python3 只会装一个版本(目前是 [email protected])更新也不会说重新下载一个不管前面的。主要是架不住别的 package 可能需要不同版本的(3.9, 3.11),你可以尝试 brew uninstall [email protected] 就知道什么依赖了,比如说

Error: Refusing to uninstall /opt/homebrew/Cellar/[email protected]/3.11.1
because it is required by black, pre-commit, vim
1 个赞

pyenv 管理 Homebrew 安装的 Python,我写了一个脚本,每次 brew upgrade 之后,自动执行一下即可:

~/bin/brew-post-update :

#!/usr/bin/env zsh

mkdir -p ~/.pyenv/versions
ln -nfs /usr/local/Cellar/python@2/2*(On[1]) ~/.pyenv/versions/
ln -nfs /usr/local/Cellar/python@2/2*(On[1]) ~/.pyenv/versions/2
ln -nfs /usr/local/Cellar/[email protected]/3*(On[1]) ~/.pyenv/versions/
ln -nfs /usr/local/Cellar/[email protected]/3*(On[1]) ~/.pyenv/versions/3
ln -nfs /usr/local/Cellar/[email protected]/3*(On[1]) ~/.pyenv/versions/3.11
ln -nfs /usr/local/Cellar/[email protected]/3*(On[1]) ~/.pyenv/versions/3.10
ln -nfs /usr/local/Cellar/[email protected]/3*(On[1]) ~/.pyenv/versions/3.9
ln -nfs /usr/local/Cellar/[email protected]/3*(On[1]) ~/.pyenv/versions/3.8

cd ~/.pyenv/versions/3/bin
cp -Rf python3.11 python3
cp -Rf python3 python
cp -Rf pip3.11 pip3
cp -Rf pip3 pip
cp -Rf pydoc3.11 pydoc3
cp -Rf python3.11-config python3-config
cp -Rf 2to3-3.11 2to3
cp -Rf idle3.11 idle3
ln -nfs wheel3.11 wheel3

cd ~/.pyenv/versions/3.10/bin
cp -Rf python3 python
cp -Rf pip3 pip

cd ~/.pyenv/versions/3.9/bin
cp -Rf python3.9 python3
cp -Rf python3.9 python
cp -Rf pip3.9 pip3
cp -Rf pip3.9 pip

cd ~/.pyenv/versions/3.8/bin
cp -Rf python3.8 python3
cp -Rf python3.8 python
cp -Rf pip3.8 pip3
cp -Rf pip3.8 pip

echo 'pyenv versions updated.'

我每天早上到公司的第一件事就是:

brew upgrade ; brew post-update ; brew cleanup ; brew list --casks | xargs -I {} brew upgrade --cask {}

3 个赞

这个emacs的包还是第一次听,确实很有用。

lulu大佬能不能讲一下脚本实际上是做了些什么嘛