Pyenv 对 Python 进行版本管理
pyenv
是管理python
版本的工具。安装pyenv
后,可以管理各种python
版本,并且各个版本的环境完全独立,互不干扰。
pyenv
是一个forked
自ruby
社区的简单、低调、遵循UNIX
哲学的Python
环境管理工具, 它可以轻松切换全局解释器版本, 同时结合vitualenv
插件可以方便的管理对应的包源。
安装
查看pyenv
版本
$ pyenv version
zsh: command not found: pyenv
没发现pyenv
则表示没安装。
从GitHub
拉源码安装
pyenv
已经在github
上开源,我们直接从github
上clone
项目到本地。
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Cloning into '/Users/matias/.pyenv'...
remote: Enumerating objects: 21745, done.
remote: Counting objects: 100% (503/503), done.
remote: Compressing objects: 100% (151/151), done.
remote: Total 21745 (delta 369), reused 439 (delta 334), pack-reused 21242
Receiving objects: 100% (21745/21745), 4.37 MiB | 57.00 KiB/s, done.
Resolving deltas: 100% (14709/14709), done.
提示 使用git clone
安装后,后续更新pyenv
时,只需要执行git pull
即可。
使用Homebrew
安装
MacOS
可以直接用homebrew
安装
$ brew install pyenv
Running `brew update --auto-update`...
...
For more information about Homebrew and Python, see: https://docs.brew.sh/Homebrew-and-Python
安装完成之后查看
$ pyenv version
system (set by /Users/matias/.pyenv/version)
注意 如果提示homebrew
且等待了很久,则可以Control + C
结束homebrew
的更新。
配置环境
添加shell
配置(如:.zshrc
和.bashrc
)
$ vim ./zshrc
$ sudo vim ./zshrc
添加如下配置
export PYENV_ROOR="$HOME/.pyenv"
export PATH=$PYENV_ROOT/shims:$PATH
# eval "$(pyenv init --path)"或eval "$(pyenv init -)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
刷新配置
$ source ~/.zshrc
$ source ~/.zprofile
如果您还希望在非交互式登录 shell
中获取 Pyenv
,还可以将命令添加到.profile
、.zprofile
或.zlogin
。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zprofile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zprofile
echo 'eval "$(pyenv init --path)"' >> ~/.zprofile
使用
注意 如果要通过共享库的方式安装Python,可使用如下命令:
$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.2
查看pyenv
版本
$ pyenv version
system (set by /Users/matias/.pyenv/version)
$ pyenv version
3.8.10 (set by /Users/matias/.pyenv/version)
查看pyenv
版本
$ pyenv --version
pyenv 2.4.1
查看可安装的Python
版本
$ pyenv install -l
Available versions:
...
3.10.0
3.10-dev
3.10.1
3.10.2
3.10.3
3.10.4
3.10.5
3.10.6
3.10.7
3.10.8
3.10.9
3.10.10
3.11.0
3.11-dev
3.11.1
3.11.2
3.12.0a5
3.12-dev
安装新的Python
版本,遇到编译失败,可以参考官方提供的解决方案 Common-build-problems
$ pyenv install 3.10.5
查看信息
$ pyenv install -v 3.10.5
查看所有版本
$ pyenv versions
全局使用某个版本
$ pyenv global 3.6.12
查看是否切换成功
$ python --version
实际上当你切换版本后, 相应的pip和包仓库都是会自动切换过去的
更多命令如下:
pyenv commands:查看所有pyenv命令 pyenv exec:使用特定Python版本执行某条命令 pyenv global:设置或查看全局Python版本 pyenv hooks:列出给出的pyenv命令的钩子脚本 pyenv init:配置shell环境 pyenv install:安装某个版本的Python pyenv local:为某个应用设置特定的Python版本 pyenv prefix:显示对应Python版本的路径前缀 pyenv rehash:再哈希pyenv shims(不清楚有什么用,欢迎评论补充) pyenv root:显示pyenv根目录 pyenv shell:为某个shell设置特定的Python版本(与pyenv local类似) pyenv shims:列出当前存在的shims(pyenv的工作原理就是在一个叫shims的目录下创建Python解释器的“假版本”,寻找Python应用时先从该目录查找) pyenv uninstall:卸载某个版本Python pyenv --version:显示pyenv版本 pyenv version:显示当前Python版本,等价于pyenv version-name+pyenv version-file pyenv version-file/version-name/version-origin:当前Python版本对应的文件/名字/位置 pyenv whence:列出已安装的一个范围内的Python版本,比如列出本地安装的Python2到Python3的版本,可以使用pyenv whence 2to3 pyenv which:列出可执行文件的绝对路径,比如pyenv which python可以列出python命令的绝对路径
global
、shell
、local
之间的区别:
global
全局设置:如果使用此命令,可以看到所有受到pyenv
控制的窗口都受到了影响, 所以尽可能不要用root
用户来安装pyenv
,否则会影响到之前的系统shell
会话设置(只影响当前的会话)local
本地设置(只影响所在文件夹)
pyenv-virtualenv
创建虚拟环境
安装pyenv-virtualenv
$ arch -arm64 brew install pyenv-virtualenv
...
To enable auto-activation add to your profile:
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
注意 安装完成需要配置eval "$(pyenv virtualenv-init -)"
到环境变量中去。
首先下载pyenv-virtualenv
插件
$ git clone https://github.com/pyenv/pyenv-virtualenv.git $.pyenv/plugins/pyenv-virtualenv
克隆完成后添加如下到shell配置文件(mac的话是.zshrc)
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
实际上mac用户直接brew
安装就可以了...
$ brew install pyenv-virtualenv
$ eval "$(pyenv init -)"
$ eval "$(pyenv virtualenv-init -)"
创建虚拟环境
创建一个Python 3.10.5
版本的虚拟环境, 命名为venv
$ pyenv virtualenv 3.10.5 venv
查看目前的所有的虚拟环境
$ pyenv virtualenvs
激活名为venv
的虚拟环境
$ pyenv activate venv
关闭虚拟环境
$ pyenv deactivate venv
删除虚拟环境
$ pyenv uninstall mtvenv
pyenv: remove /Users/matias/.pyenv/versions/mtvenv? (y/N) y
pyenv: mtvenv uninstalled
注意 上面这种删除可能只是删除了虚拟环境的软链接,真正的文件夹还在,如果需要彻底删除的话,可以手动删除对应的文件夹。
如下是虚拟环境的列表,如果我们使用pyenv uninstall llm-services
删除虚拟环境后,llm-services
对应的文件夹还在,需要手动删除。
$ pyenv virtualenvs
3.10.5/envs/llm-services (created from /Users/matias/.pyenv/versions/3.10.5)
3.11.9/envs/novels-ai-local (created from /Users/matias/.pyenv/versions/3.11.9)
3.11.9/envs/novels-api-local (created from /Users/matias/.pyenv/versions/3.11.9)
3.8.10/envs/help (created from /Users/matias/.pyenv/versions/3.8.10)
help (created from /Users/matias/.pyenv/versions/3.8.10)
llm-services (created from /Users/matias/.pyenv/versions/3.10.5)
novels-ai-local (created from /Users/matias/.pyenv/versions/3.11.9)
novels-api-local (created from /Users/matias/.pyenv/versions/3.11.9)
$ pyenv uninstall llm-services
pyenv: remove /Users/matias/.pyenv/versions/llm-services? (y/N) y
pyenv: mtvenv llm-services
这里只删除了~/.pyenv/versions
路径下的软链接。
$ pyenv virtualenvs
3.10.5/envs/llm-services (created from /Users/matias/.pyenv/versions/3.10.5)
3.11.9/envs/novels-ai-local (created from /Users/matias/.pyenv/versions/3.11.9)
3.11.9/envs/novels-api-local (created from /Users/matias/.pyenv/versions/3.11.9)
3.8.10/envs/help (created from /Users/matias/.pyenv/versions/3.8.10)
help (created from /Users/matias/.pyenv/versions/3.8.10)
novels-ai-local (created from /Users/matias/.pyenv/versions/3.11.9)
novels-api-local (created from /Users/matias/.pyenv/versions/3.11.9)
我们进入~/.pyenv/versions/3.10.5/envs/
还是能够看到llm-services
文件夹的。
$ cd ~/.pyenv/versions/3.10.5/envs
$ ll
total 0
drwxr-xr-x 6 matias staff 192B 12 26 2023 llm-services
手动删除llm-services
文件夹。
$ rm -rf ./llm-services
-e Moving \e[1;34m./llm-services\e[0m to \e[1;31m/Users/matias/.Trash\e[0m
MV exit status: 0
提示 这里的删除后的提示信息是,将rm指令重定向到了一个sh脚本。这个脚本的作用是将rm的内容,放到垃圾桶里去。
当切换Python
解释器的时候对应的pip
和包库也会一并切换过去, 而且可以为指定版本的解释器创建项目所需的虚拟环境, 切换的时候也异常简单, 个人常用的做法是为每个项目创建不同的虚拟环境, 当进入该环境的时候就可以随便浪而不用担心影响到其它项目, 搭配编辑器如:Pycharm
、VSCode
使用效果更佳。
对比
pyenv
、pipenv
、virtualenv
的关系
pipenv
是requests
作者 Kenneth Reitz
写的一个python
虚拟环境管理工具, 结合了pip
和virtualenv
的功能, 侧重点还是在包环境管理上, 使用思路是先创建一个指定python
版本的环境, 然后在此环境上安装相应的包。
virtualenv
是一个比较传统成熟的虚拟环境管理工具了, 用的人也比较多, 思路也是创建虚拟环境, 然后安装相应的包, 要进入环境就source
一下activate
脚本激活一下。
pyenv
相对于其他两个工具, pyenv
更侧重在 python
解释器版本管理上, 比包管理更大一个层级, 使用pyenv
我可以方便的下载指定版本的python
解释器, pypy
, anaconda
等, 可以随时自由的在shell
环境中本地、全局切换python
解释器。pyenv
切换解释器版本的时候, pip
和python
以及对应的包环境都是一起切换的, 所以如果你要同时运行python2.x
和python3.x
多个解释器验证一些代码时就很方便。pyenv
也可以创建好指定的虚拟环境, 但不需要指定具体目录, 自由度更高, 使用也简单。
错误
pyenv: no installed versions match the prefix `-f'
使用pyenv virtualenv 3.12.3 venv
创建虚拟环境时,报错
$ pyenv virtualenv 3.12.3 venv
pyenv: no installed versions match the prefix `-f'
根据这下面两个issues来看,我们先升级pyenv
到最新版本。 pyenv-virtualenv issues 488pyenv-virtualenv issues 487
查看当前pyenv
版本
$ pyenv --version
pyenv 2.4.1
issues 里面提示需要将 pyenv 升级到 2.4.8
$ brew upgrade pyenv
==> Downloading https://formulae.brew.sh/api/formula.jws.json
==> Downloading https://formulae.brew.sh/api/cask.jws.json
==> Upgrading 1 outdated package:
pyenv 2.4.19 -> 2.5.2
==> Fetching dependencies for pyenv: ca-certificates
==> Fetching ca-certificates
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles//ca-certificates-2024-12-31.all.bottle.tar.gz
####################################################################################################################################### 100.0%
==> Fetching pyenv
==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles//pyenv-2.5.2.arm64_sequoia.bottle.tar.gz
####################################################################################################################################### 100.0%
==> Upgrading pyenv
2.4.19 -> 2.5.2
==> Installing dependencies for pyenv: ca-certificates
==> Installing pyenv dependency: ca-certificates
==> Pouring ca-certificates-2024-12-31.all.bottle.tar.gz
==> Regenerating CA certificate bundle from keychain, this may take a while...
🍺 /opt/homebrew/Cellar/ca-certificates/2024-12-31: 4 files, 233.8KB
==> Installing pyenv
==> Pouring pyenv-2.5.2.arm64_sequoia.bottle.tar.gz
🍺 /opt/homebrew/Cellar/pyenv/2.5.2: 1,283 files, 4.2MB
==> Running `brew cleanup pyenv`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
Removing: /opt/homebrew/Cellar/pyenv/2.4.19... (1,244 files, 4MB)
Removing: /Users/matias/Library/Caches/Homebrew/pyenv--2.4.19.arm64_sequoia.bottle.tar.gz... (1.3MB)
==> Upgrading 22 dependents of upgraded formulae:
Disable this behaviour by setting HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
cocoapods 1.16.2 -> 1.16.2_1, edencommon 2024.11.18.00 -> 2024.12.02.00_1, fbthrift 2024.11.18.00 -> 2024.12.02.00_3, fizz 2024.11.18.00 -> 2024.12.02.00, fb303 2024.11.18.00 -> 2024.12.02.00, folly 2024.11.18.00 -> 2024.12.02.00_1, glib 2.82.2 -> 2.82.4, ffmpeg 7.1_3 -> 7.1_4, harfbuzz 10.1.0 -> 10.2.0, node 23.3.0 -> 23.7.0, pango 1.54.0 -> 1.56.1, pipx 1.7.1 -> 1.7.1_1, python@3.10 3.10.15 -> 3.10.16, python@3.11 3.11.10 -> 3.11.11, python@3.12 3.12.7_1 -> 3.12.9, python@3.13 3.13.0_1 -> 3.13.2, python@3.9 3.9.20 -> 3.9.21, redis 7.2.6 -> 7.2.7, ruby 3.3.6 -> 3.4.1, tcl-tk 9.0.0_1 -> 9.0.1, wangle 2024.11.18.00 -> 2024.12.02.00, watchman 2024.11.18.00 -> 2024.12.02.00_2
更新完成之后查看版本信息
pyenv --version
pyenv 2.4.1
还是之前的版本,看更新记录,应该是2.5.2版本。
通过brew info pyenv
查看安装信息
$ brew info pyenv
==> pyenv: stable 2.5.2 (bottled), HEAD
Python version management
https://github.com/pyenv/pyenv
Installed
/opt/homebrew/Cellar/pyenv/2.5.2 (1,283 files, 4.2MB) *
Poured from bottle using the formulae.brew.sh API on 2025-02-07 at 10:17:59
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/p/pyenv.rb
License: MIT
==> Dependencies
Required: autoconf ✔, openssl@3 ✔, pkgconf ✔, readline ✔
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 135,313 (30 days), 410,157 (90 days), 1,432,774 (365 days)
install-on-request: 134,798 (30 days), 408,393 (90 days), 1,425,882 (365 days)
build-error: 5 (30 days)
我们确认一下pyven
的路径
$ which pyenv
pyenv () {
local command=${1:-}
[ "$#" -gt 0 ] && shift
case "$command" in
(activate | deactivate | rehash | shell) eval "$(pyenv "sh-$command" "$@")" ;;
(*) command pyenv "$command" "$@" ;;
esac
}
这应该是一个脚本里面的代码,我们再看一下pyenv
安装的路径
$ where pyenv
pyenv () {
local command=${1:-}
[ "$#" -gt 0 ] && shift
case "$command" in
(activate | deactivate | rehash | shell) eval "$(pyenv "sh-$command" "$@")" ;;
(*) command pyenv "$command" "$@" ;;
esac
}
/Users/matias/.pyenv/bin/pyenv
/opt/homebrew/bin/pyenv
查看一下zsh
的配置文件
$ cat .zprofile
...
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/shims:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
...
可以看到,这里使用的是~/.pyenv
,这个是我们安装的时候,git clone
的地址。我们直接去更新
$ cd ~/.pyenv
$ git pull
remote: Enumerating objects: 826, done.
remote: Counting objects: 100% (324/324), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 826 (delta 320), reused 322 (delta 320), pack-reused 502 (from 1)
Receiving objects: 100% (826/826), 776.76 KiB | 1.39 MiB/s, done.
Resolving deltas: 100% (532/532), completed with 63 local objects.
From https://github.com/pyenv/pyenv
...
更新完成之后,我们再查看一下版本信息
$ pyenv --version
pyenv 2.5.2-1-gd327702c
后续创建虚拟环境也成功了。
BUILD FAILED (OS X 11.5.1 using python-build 2.3.2-7-g16f7ea03)
安装新的Python
版本pyenv install 3.10.5
或pyenv install -v 3.10.5
报错#1245
ld: warning: ld: warning: directory not found for option '-L/Users/matias/.pyenv/versions/3.10.5/lib'directory not found for option '-L/Users/matias/.pyenv/versions/3.10.5/lib'
ld: warning: directory not found for option '-L/Users/matias/.pyenv/versions/3.10.5/lib'
ld: warning: directory not found for option '-L/Users/matias/.pyenv/versions/3.10.5/lib'
Undefined symbols for architecture x86_64:
"_libintl_bindtextdomain", referenced from:
Undefined symbols for architecture x86_64:
"_libintl_bindtextdomain", referenced from:
__locale_bindtextdomain in libpython3.10.a(_localemodule.o)
__locale_bindtextdomain in libpython3.10.a(_localemodule.o)
"_libintl_dcgettext", referenced from:
"_libintl_dcgettext", referenced from:
__locale_dcgettext in libpython3.10.a(_localemodule.o)
"_libintl_dgettext", referenced from:
__locale_dcgettext in libpython3.10.a(_localemodule.o)
__locale_dgettext in libpython3.10.a(_localemodule.o)
"_libintl_dgettext", referenced from:
"_libintl_gettext", referenced from:
__locale_gettext in libpython3.10.a(_localemodule.o)
__locale_dgettext in libpython3.10.a(_localemodule.o)
"_libintl_setlocale", referenced from:
"_libintl_gettext", referenced from:
__locale_setlocale in libpython3.10.a(_localemodule.o)
__locale_localeconv in libpython3.10.a(_localemodule.o)
__locale_gettext in libpython3.10.a(_localemodule.o)
"_libintl_textdomain", referenced from:
"_libintl_setlocale", referenced from:
__locale_textdomain in libpython3.10.a(_localemodule.o)
__locale_setlocale in libpython3.10.a(_localemodule.o)
__locale_localeconv in libpython3.10.a(_localemodule.o)
"_libintl_textdomain", referenced from:
__locale_textdomain in libpython3.10.a(_localemodule.o)
ld: symbol(s) not found for architecture x86_64
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Programs/_testembed] Error 1
make: *** Waiting for unfinished jobs....
make: *** [python.exe] Error 1
BUILD FAILED (OS X 11.5.1 using python-build 2.3.2-7-g16f7ea03)
Inspect or clean up the working tree at /var/folders/bz/qdc41tl10s36tg71w9qdq5jh0000gn/T/python-build.20220727103447.34041
Results logged to /var/folders/bz/qdc41tl10s36tg71w9qdq5jh0000gn/T/python-build.20220727103447.34041.log
Last 10 log lines:
__locale_localeconv in libpython3.10.a(_localemodule.o)
"_libintl_textdomain", referenced from:
__locale_textdomain in libpython3.10.a(_localemodule.o)
ld: symbol(s) not found for architecture x86_64
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Programs/_testembed] Error 1
make: *** Waiting for unfinished jobs....
make: *** [python.exe] Error 1
确保安装了 Python 的二进制依赖项和构建工具。遇到编译失败,可以参考官方提供的解决方案 Common-build-problems
只需为命令添加前缀:AR=/usr/bin/env pyenv install ....
这AR
为调用pyenv
. 或者(暂时)brew uninstall binutils
,如果那是ar
从哪里来的(你可以检查which ar
——如果它说/usr/local/bin/ar
你可能已经安装了 binutils
)。
$ which ar
/usr/bin/ar
$ env PYTHON_CONFIGURE_OPTS="--enable-framework --enable-universalsdk --with-universal-archs=universal2" pyenv install 3.10.5
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Installing Python-3.10.5...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
BUILD FAILED (OS X 12.5 using python-build 2.3.2-7-g16f7ea03)
Inspect or clean up the working tree at /var/folders/bz/qdc41tl10s36tg71w9qdq5jh0000gn/T/python-build.20220729155015.61546
Results logged to /var/folders/bz/qdc41tl10s36tg71w9qdq5jh0000gn/T/python-build.20220729155015.61546.log
Last 10 log lines:
"_libintl_gettext", referenced from:
__locale_gettext in libpython3.10.a(_localemodule.o)
"_libintl_setlocale", referenced from:
__locale_setlocale in libpython3.10.a(_localemodule.o)
__locale_localeconv in libpython3.10.a(_localemodule.o)
"_libintl_textdomain", referenced from:
__locale_textdomain in libpython3.10.a(_localemodule.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Python.framework/Versions/3.10/Python] Error 1
重要 安装成功先安装了arch -arm64 brew install pyenv-virtualenv
然后配置了.zshrc
和.zprofile
.zshrc
如下:
$ cat ~/.zshrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
.zprofile
如下:
$ cat ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
eval "$(/opt/homebrew/bin/brew shellenv)"
# Created by `pipx` on 2021-09-17 05:33:24
export PATH="$PATH:/Users/matias/.local/bin"
eval "$(/opt/homebrew/bin/brew shellenv)"
`pyenv`主要看下面几个
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"
安装python 3.10.5
$ arch -arm64 pyenv install 3.10.5
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Installing Python-3.10.5...
python-build: use tcl-tk from homebrew
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.10.5 to /Users/matias/.pyenv/versions/3.10.5
pyenv安装python太慢慢
使用 pyenv 安装 python 时,默认从 python.org 下载指定版本,往往特别慢,经常下载失败,这时可以先从官网下载所需要的版本的源代码到 ~/.pyenv/cache
目录下,再执行安装命令(亲测很好用)。
注意 这里要下载的是类似于 Python-3.7.3.tar.xz
这样的压缩文件,要到官网 sourcecode 页面才可以下载。
如果是下载 python
源码这一步慢,可以先创建缓存目录 mkdir $PYENV_ROOT/cache
然后用别的方法下载 Python
源码放到该目录下。 这个路径是由 PYTHON_BUILD_CACHE_PATH
控制的,默认值是 "$PYENV_ROOT/cache"
,但是文件夹并不是默认创建的。 相关代码可以自己查看pyenv-install
使用国内源
3.7.5
是版本号,-P
是下载到指定目录,如果没用cache
目录必须先创建此目录
$ wget http://mirrors.sohu.com/python/3.7.5/Python-3.7.5.tar.xz -P ~/.pyenv/cache/
如果有想下载其他,那么把版本号改掉即可,格式如下 $v
代表版本
$ wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/
$ wget https://npm.taobao.org/mirrors/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/
下载完成以后运行命令即可
注意 wget的方式未成功下载,好像是因为mirrors.sohu.com下面没有python的目录了
https://pypi.tuna.tsinghua.edu.cn/simple/ # 清华
http://pypi.doubanio.com/simple/ # 豆瓣
http://mirrors.aliyun.com/pypi/simple/ # 阿里云
http://pypi.hustunique.com/ # 华中理工大学
http://pypi.sdutlinux.org/ # 山东理工大学
https://pypi.mirrors.ustc.edu.cn/simple/ # 中国科学技术大学
http://mirrors.163.com/pypi/simple/ # 网易
清华大学开源镜像站 https://mirrors.tuna.tsinghua.edu.cn/
网易开源镜像站 http://mirrors.163.com/
阿里巴巴开源镜像站 https://opsx.alibaba.com/mirror/
网易开源镜像站http://mirrors.163.com/
搜狐镜像站(PHP,python)http://mirrors.sohu.com/
淘宝镜像 https://npm.taobao.org/mirrors/
腾讯软件源 mirrors.cloud.tencent.com/
华为开源镜像站:mirrors.huaweicloud.com/
9.中国科技大学:mirrors.ustc.edu.cn/
10.北京交通大学:mirror.bjtu.edu.cn/cn/
11.上海交通大学:ftp.sjtu.edu.cn/
12.北京理工大学:mirror.bit.edu.cn/web/
13.浙江大学:http://mirrors.zju.edu.cn
14.北京理工大学:http://mirror.bit.edu.cn
15.华中科技大学:mirrors.hust.edu.cn/
16.豆瓣http://pypi.douban.com/simple/
17.华中理工大学http://pypi.hustunique.com/simple/
18.山东理工大学 http://pypi.sdutlinux.org/simple/
上面选择一个源下载,最好先确认下路径下面有没有对应的版本文件
$ wget https://npm.taobao.org/mirrors/python/3.8.10/Python-3.8.10.tar.xz -P ~/.pyenv/cache/
--2023-03-07 17:18:48-- https://npm.taobao.org/mirrors/python/3.8.10/Python-3.8.10.tar.xz
Resolving npm.taobao.org (npm.taobao.org)... 114.55.80.225
Connecting to npm.taobao.org (npm.taobao.org)|114.55.80.225|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://cdn.npmmirror.com/binaries/python/3.8.10/Python-3.8.10.tar.xz [following]
--2023-03-07 17:18:48-- https://cdn.npmmirror.com/binaries/python/3.8.10/Python-3.8.10.tar.xz
Resolving cdn.npmmirror.com (cdn.npmmirror.com)... 182.140.196.215, 182.140.196.221, 182.140.196.216, ...
Connecting to cdn.npmmirror.com (cdn.npmmirror.com)|182.140.196.215|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18433456 (18M) [application/x-xz]
Saving to: ‘/Users/matias/.pyenv/cache/Python-3.8.10.tar.xz’
Python-3.8.10.tar.xz 100%[====================================================>] 17.58M 12.3MB/s in 1.4s
2023-03-07 17:18:50 (12.3 MB/s) - ‘/Users/matias/.pyenv/cache/Python-3.8.10.tar.xz’ saved [18433456/18433456]