(请原谅我的英语)
我的服务器操作系统是 Ubuntu 20.04。众所周知,在 Ubuntu 20.04 中,默认情况下安装了 Python 3.8,并且许多系统应用程序都在 Python 3.8 上运行。
我在我的 Ubuntu 服务器上额外安装了 Python 3.9。我的服务器运行了一段时间。
然而,当我升级全局模块时Python(3.8 和 3.9 都适用)时,问题就出现了。一些系统程序(例如Software Updater
和Software and Update
)无法运行。它们给出错误,提示无法找到某些 Python 全局模块。我尝试通过重新安装 Python 全局模块来修复该问题,但无法修复。
我不需要整个服务器系统都安装 Python 3.9,只需要几个非 root 用户帐户。而且唯一需要的全局模块是pip
和venv
。其他模块可以在项目基础上安装。
所以,我尝试以非 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 文件夹中。