node 多版本管理分为两部分,一个是 node 本身不同版本的切换和使用,另一个是 npm 镜像的切换和使用。使用到的工具分别为 nvm
和 nrm
安装方法请参照官方仓库nvm
使用 nvm 管理和切换 node 版本时,要使用
nvm install
来安装不同版本的 node,这样才能正常工作。
# 查看所有命令
nvm
# 查看现在使用的node版本
nvm ls
# 安装指定版本的 node
nvm install 16.13.2
# 查看node所有可安装版本
nvm ls-remote
# 使用指定版本 node。nvm 会根据指定的版本号智能选择 node 版本
# 例如,本地安装了 V16.13.2,当执行 `nvm use 16` 时,nvm 会自动引用 16.13.2,当有多个 v16 版本时,优先使用更新的版本
nvm use node版本号
# 卸载指定版本node
nvm uninsstall node版本号
// install
npm install -g nrm
# list all supported repos
nrm ls
# add new public(or private) repo
nrm add name repoURL repoHomePage
# switch to specified repo
nrm use name
# list the repo info used for now
nrm current
Python 的多版本管理需要用到 pyenv,这是一个从 ruby 社区移植过来的工具。
需要注意的是,必须通过 pyenv 安装对应版本的 python,pyenv 才能正常切换 python 版本。
pyenv 会将 python 安装在 $(pyenv root)/versions/{python_version}/
路径下。安装好 python 后,pyenv 会根据配置信息自动的切换当前使用的 python 版本。可以通过 4 种方式配置 python 版本,它们的含义和优先级如下所示:
PYENV_VERSION
环境变量。pyenv shell
命令可以设置该环境变量的值,并设置当前 shell 所使用的 python 版本.python-version
文件。你可以通过 pyenv local
命令来修改这个文件中的信息,指定当前项目使用的 python 版本,并切换到对应版本PYENV_VERSION
环境变量和 .python-version
文件,则 pyenv 会向父目录便利查找,如果在某一级父目录找到了 .python-version
文件,就根据该文件的配置设置 python 版本$(pyenv root)/version
文件。你可以通过 pyenv global
命令来配置这个文件。如果这个文件没有配置,pyenv 就是使用系统中的 python 作为当前使用的 python安装 pyenv 之前,需要首先安装一些依赖工具,这些工具用于安装或编译指定版本的 python。你可以按照这里的指导安装这些依赖
Linux 环境下,pyenv 默认安装在 ~/.pyenv
路径下
# install
curl https://pyenv.run | bash
# the same as following
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
# 安装完成后重启 shell 或者重新打开 terminal
# 可以使用下面的命令重启 shell
exec $SHELL
# 升级 pyenv
pyenv update
# 卸载。$(pyenv root)
rm -rf ~/.pyenv
# 从 .bashrc 中删除下面的代码
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"
# 完成后重启 shell 或者重新打开 terminal
# 查看已安装的 python 版本列表
pyenv versions
# 产看当前正在使用的 python 版本(按照配置优先级最后确定的版本)
pyenv version
# 设置当前项目或目录使用的 python 版本
pyenv local version(eg: 2.7.6)
# 查看当前项目或目录使用的 python 版本
pyenv local
# 取消设置
pyenv local --unset
# 全局设置(注意优先级问题)
pyenv globale version(eg: 2.7.6)
# 设置当前 shell 使用的 python 版本(注意优先级问题)
pyenv shell version
pyenv shell --unset
安装 python
Usage: pyenv install [-f] [-kvp]
pyenv install [-f] [-kvp]
pyenv install -l|--list
-l/--list List all available versions
-f/--force Install even if the version appears to be installed already
-s/--skip-existing Skip the installation if the version appears to be installed already
python-build options:
-k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation
(defaults to $PYENV_ROOT/sources)
-v/--verbose Verbose mode: print compilation status to stdout
-p/--patch Apply a patch from stdin before building
-g/--debug Build a debug version
卸载指定版本 python pyenv uninstall version(eg:2.7.3)
更新本地数据 pyenv rehash
。每次安装新版本 python 或者安装其他二进制依赖包后,需要执行这个命令
使用 jenv
做 java 的多版本管理。具体使用方式请参照官方文档
# install
git clone https://github.com/jenv/jenv.git ~/.jenv
# config for bash
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile
# config for zsh
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc
# 添加不同 java 的版本信息
jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home oracle64-1.6.0.39 added
jenv add /Library/Java/JavaVirtualMachines/jdk17011.jdk/Contents/Home oracle64-1.7.0.11 added
# 查看列表
jenv versions
# 指定 java 版本
jenv global oracle64-1.6.0.39
jenv local oracle64-1.6.0.39
jenv shell oracle64-1.6.0.39
专门用于 java 相关管理。例如安装使用指定版本的 java sdk,安装使用指定版本的其他 java 工具(如:groovy、scala 等)
具体安装和使用方法,参照 SDKMan
alternatives
可以方便的为同一个命令在不同版本间切换。其使用方法如下:
alternatives --install
假设电脑上安装了两个版本的 java,其 Home 路径如下:
使用 alternative 来切换不同 java 版本,总总分三步:
alternatives --install
来完成alternatives --config java
来完成alternatives 适合给单个命令做版本管理,不适合给命令集合做版本。比如 java,当切换 JAVA_HOME
所有 java 相关的命令都会切换到对应版本。而对于 node.js 来说,node.js 除了 node
命令外,还有配套的 npm
命令,如果要使用 alternatives
来管理,就需要同时切换这两个命令的版本,这也是 nvm
和 pyenv
这种版本管理工具存在的必要。
SCL(Software Collections) 用于管理多个软件版本,优点是不会污染系统环境。SCL 提供了多个版本的软件集合,每个集合包含了多个开发相关的软件工具,如:GCC、JAVA 相关开发工具、Python等。
除了使用官方提供的软件集合外,用户还可以按照实际需求自己制作软件集合。具体使用方法请参照官网