Linux 管理多个软件版本的方法总结

目录

  • node 多版本管理
    • nvm
      • 安装
      • 使用
    • nrm
  • Python 多版本管理
    • 介绍
    • 安装
    • 使用
  • java 多版本管理
    • jenv
    • sdkman
  • alternatives
  • SCL

node 多版本管理

node 多版本管理分为两部分,一个是 node 本身不同版本的切换和使用,另一个是 npm 镜像的切换和使用。使用到的工具分别为 nvmnrm

nvm

安装

安装方法请参照官方仓库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版本号

nrm

// 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 多版本管理

Python 的多版本管理需要用到 pyenv,这是一个从 ruby 社区移植过来的工具。

需要注意的是,必须通过 pyenv 安装对应版本的 python,pyenv 才能正常切换 python 版本。

介绍

pyenv 会将 python 安装在 $(pyenv root)/versions/{python_version}/ 路径下。安装好 python 后,pyenv 会根据配置信息自动的切换当前使用的 python 版本。可以通过 4 种方式配置 python 版本,它们的含义和优先级如下所示:

  1. PYENV_VERSION 环境变量。pyenv shell 命令可以设置该环境变量的值,并设置当前 shell 所使用的 python 版本
  2. 当前项目目录中的 .python-version 文件。你可以通过 pyenv local 命令来修改这个文件中的信息,指定当前项目使用的 python 版本,并切换到对应版本
  3. 如果当前目录没有 PYENV_VERSION 环境变量和 .python-version 文件,则 pyenv 会向父目录便利查找,如果在某一级父目录找到了 .python-version 文件,就根据该文件的配置设置 python 版本
  4. 全局 $(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 或者安装其他二进制依赖包后,需要执行这个命令

java 多版本管理

jenv

使用 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

sdkman

专门用于 java 相关管理。例如安装使用指定版本的 java sdk,安装使用指定版本的其他 java 工具(如:groovy、scala 等)

具体安装和使用方法,参照 SDKMan

alternatives

alternatives 可以方便的为同一个命令在不同版本间切换。其使用方法如下:

alternatives --install    

假设电脑上安装了两个版本的 java,其 Home 路径如下:

  1. /usr/lib/jvm/jre-1.7.0-icedtea/bin/java
  2. /usr/lib/jvm/jre-1.5.0-gcj/bin/java
  3. /tools/jdk/bin/java

使用 alternative 来切换不同 java 版本,总总分三步:

  1. 安装 jdk
  2. 安装(初始化)。通过 alternatives --install 来完成
  3. 选择当前要使用的版本。通过 alternatives --config java 来完成

alternatives 适合给单个命令做版本管理,不适合给命令集合做版本。比如 java,当切换 JAVA_HOME 所有 java 相关的命令都会切换到对应版本。而对于 node.js 来说,node.js 除了 node 命令外,还有配套的 npm 命令,如果要使用 alternatives 来管理,就需要同时切换这两个命令的版本,这也是 nvmpyenv 这种版本管理工具存在的必要。

SCL

SCL(Software Collections) 用于管理多个软件版本,优点是不会污染系统环境。SCL 提供了多个版本的软件集合,每个集合包含了多个开发相关的软件工具,如:GCC、JAVA 相关开发工具、Python等。

除了使用官方提供的软件集合外,用户还可以按照实际需求自己制作软件集合。具体使用方法请参照官网

你可能感兴趣的:(Linux,linux,多版本管理,nvm,jenv,scl)