类似 nvm, 不知道 nrm 的类似物是啥, 如果有的话, 配镜像源就方便多了

记录以下 pyenv 使用的前因后果以及体验, 昨天晚上到今天一直在 build mongo 源码, mongo 源码基本使用 python 生成相关的 build 脚本或者配置. 关于 build mongo 具体的过程得空再写一下, 为啥考虑用 pyenv, mongo build 文档中约定的版本为 >=3.10, ubuntu 24.04 默认安装 3.12.3 绝对符合要求, 可是我万万没想到啊, mongo build 脚本中使用了一些版本差异的不兼容 api, 真是日狗子了, 虽然目前发现的不多, 但是我改不了了, 很多他们自己发的包上面也用了, 要想基于 3.12.3 版本 build 成功就要解决这些问题, 或者换个思路, 不用高版本的 python 了, 直接使用 3.10.x 的, 应该没啥毛病吧, 说实话确实没啥毛病, 自己找个了 云服务临时实例 测试过很 ok, 现在就找个 python 版本管理工具用上指定版本的 python 吧, 当时没过多考察抉择, 是要能实现多版本管理就 ok, 实际那个工具好用就行, 系统预装python 版本和环境打死我都不乱动滴, 吃过亏, 得空回忆的时候可以写一下, 当时处理了将近一天, 回到 pyenv 记录一下相关命令和需要注意的点.

安装

pyenv github

环境为 ubuntu, 就直接选用 automatic-installer

# 注意可能代理
curl https://pyenv.run | bash
# 装完需要配置 bash 执行前的脚本, ~/.profile ~/.bash_profile 之类的, 因人而异, 我这里选择的是 ~/.bashrc
# 具体内容安装成功之后会有提示, 这里有点疑惑的是, pyenv 支持进入某个目录之后自动切换到对应版本吗? 类似 nvm 这种的?
pyenv install 3.10.4

该说不说, 下载过程都没有, build 相关的信息也没, 整个安装过程信息变动和提示很少, 而且 build 应该是有自己的默认策略的, 我这里下载之后 build 还要用 apt 下很多扩展, 比如 sqlite 之类的, 关键这些我都用不到啊, 还不知道哪里改...

  • 下载过程没进度
  • 安装过程很多信息不展示
  • build 无交互, 不能选择

慎之, 千万不能写这种极度不友好的程序, 见过自省

镜像源配置

不知何故, 命令行设置失效, 很迷惑, 留以后有机会再细探吧, 这里用 清华源腾讯源

# https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
# 无用, 似乎某一版本之后给废除了
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
# 同样无用
poetry source add --priority=primary mirrors https://pypi.tuna.tsinghua.edu.cn/simple/

最终使用相关配置文件来实现了

# 这是 ubuntu 上默认的配置位置
mkdir -p ~/.pip && touch ~/.pip/pip.conf
# 内容添加
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

因为还需要配置 pypoetry

# 这是 ubuntu 上默认的配置位置
mkdir -p ~/.config/pypoetry && touch ~/.config/pypoetry/config.toml
# 内容添加
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

腾讯云大差不差, 镜像源地址为 https://mirrors.cloud.tencent.com/pypi/simple

NOTE: 慎之, 千万不能写极度不友好的程序, 见过自省