为非 root 用户安全地安装 Python 3.9?

为非 root 用户安全地安装 Python 3.9?

(请原谅我的英语)

我的服务器操作系统是 Ubuntu 20.04。众所周知,在 Ubuntu 20.04 中,默认情况下安装了 Python 3.8,并且许多系统应用程序都在 Python 3.8 上运行。
我在我的 Ubuntu 服务器上额外安装了 Python 3.9。我的服务器运行了一段时间。

然而,当我升级全局模块时Python(3.8 和 3.9 都适用)时,问题就出现了。一些系统程序(例如Software UpdaterSoftware and Update)无法运行。它们给出错误,提示无法找到某些 Python 全局模块。我尝试通过重新安装 Python 全局模块来修复该问题,但无法修复。

我不需要整个服务器系统都安装 Python 3.9,只需要几个非 root 用户帐户。而且唯一需要的全局模块是pipvenv。其他模块可以在项目基础上安装。
所以,我尝试以非 root 用户身份安装 Python 3.9。但出现了一些错误,失败了。

如何为非root用户安全地安装Python 3.9(或更高版本)?

  • 在这里,安全的安装意味着安装不会干扰系统默认的 Python 3.8。
  • 无论 Python 3.9(或更高版本)是全系统安装还是为特定用户安装都无关紧要。

答案1

Ubuntu 20.04 及更高版本在其默认存储库中具有 python3.9 包。它可以与默认的 python3.8 包一起安装,sudo apt update && sudo apt install python3.9从默认的 Ubuntu 存储库安装 python3.9 包可简化包管理。

如果您使用的是 Ubuntu 20.04,请将 Python 3.8 保留为默认的 Python 3.x 版本,并仅在必要时使用 切换到 Python 3.9 update-alternatives。使用完 Python 3.9 后,您可以将其切换回默认的 Python 3 版本。

  • 列出已安装的 Python 版本:update-alternatives --list python

  • 切换 Python 版本:update-alternatives --config python

    从终端命令行按 <enter> 保留当前选择[*],或输入选择编号:

答案2

您可以通过执行以下代码并以变量“PYTHON_VER”中定义的所需 Python 版本安全地以本地/非 root 用户身份安装 Python

# Install Python3 and Libraries as a local user. 
python_config() {
    export PYTHON_VER="3.10.5" 
    export PYTHON_VER_SHORT="$(echo ${PYTHON_VER} | cut -d '.' -f1,2)" 
    cd ~ 
    rm -rf ~/python && mkdir -p ~/python 
    echo "" >> ~/.bashrc 
    echo "export PATH=~/python/bin:$PATH" >> ~/.bashrc 
    source ~/.bashrc 
    wget --quiet --no-check-certificate "https://www.python.org/ftp/python/${PYTHON_VER}/Python-${PYTHON_VER}.tgz" 
    tar -zxvf ~/Python-${PYTHON_VER}.tgz 1>/dev/null 
    cd ~/Python-${PYTHON_VER}/ 
    echo "Python ${PYTHON_VER} - Installing in current logged-in user - $(whoami)" 
    echo "Python ${PYTHON_VER} - Installation in-progress. Please wait..." 
    ./configure --enable-optimizations --prefix=$HOME/python > /dev/null 2>&1; 
    echo "Python ${PYTHON_VER} - ETA: upto 5mins. Please wait..." 
    make altinstall > /dev/null 2>&1; 
    ln -s ~/python/bin/python${PYTHON_VER_SHORT} ~/python/bin/python3 
    ln -s ~/python/bin/pip${PYTHON_VER_SHORT} ~/python/bin/pip3 
    wget --quiet --no-check-certificate https://bootstrap.pypa.io/get-pip.py -O - | python3 - --prefix=$HOME/python 
    source ~/.bashrc 
    ~/python/bin/pip3 install --upgrade pip 
    ~/python/bin/pip3 install --upgrade pygithub 
    ~/python/bin/pip3 install --upgrade --no-cache-dir -r /tmp/requirements.txt --use-pep517 
    cd ~ && rm -rf ~/Python-${PYTHON_VER}* 
    ~/python/bin/python3 --version 
    ~/python/bin/pip3 --version 
    echo "Python ${PYTHON_VER} - Setup Completed!" 
}

# Function Call
python_config

答案3

您可能需要检查 python3 映射了哪个版本。

ls -l /usr/bin/python3

如果符号链接在 python3.9 上,您可以尝试使用以下命令恢复到版本 python3.8

cd /usr/bin/
sudo ln -sf python3.8 python3

其实问题不大,因为你可以有多个系统 python 版本。如果你的用户需要使用 python3.9,只需使用python3.9 <your script>.py

答案4

如果您要问的是安装非 root 用户可用的系统范围内的 Python 版本,我还没有找到一个好的方法。但是,在系统上同时安装多个版本的 Python 是没有问题的。从 Python 网站下载相应的 .tgz 文件。然后(我将使用版本 3.10.6 来说明):

# tar xfp Python-3.10.6.tgz
# cd Python-3.10.6
# ./configure --prefix=/usr/local --exec_prefix=/usr/local --enable-optimizations
# make
# make altinstall

就是这样。只要 /usr/local/bin 在您的路径中,您就可以通过键入以下内容来执行此版本的 python:

$ python3.10

要使用 pip 添加软件包,请使用

# pip3.10 install <a_package>

它会将该包添加到 /usr/local/lib 下 3.10.6 安装的 site-packages 文件夹中。

相关内容