引言

随着CentOS 8在2021年底结束生命周期,许多企业开始寻找替代方案。Rocky Linux作为CentOS的直接继任者,由CentOS的创始人Gregory Kurtzer领导开发,已成为企业环境中的热门选择。Rocky Linux 9作为最新的稳定版本,提供了强大的企业级功能和长期支持。

Python作为一种高级编程语言,在企业应用、自动化脚本、数据科学、机器学习和Web开发等领域有着广泛的应用。对于系统管理员和开发人员来说,在Rocky Linux 9上正确安装和配置Python环境是必不可少的技能。

本指南将详细介绍在Rocky Linux 9上安装Python的全过程,从基础安装到高级配置,包括多版本管理、依赖管理以及常见问题的解决方案,旨在帮助系统管理员和开发人员建立稳定、高效的Python开发环境。

Rocky Linux 9基础设置

在开始安装Python之前,我们需要确保Rocky Linux 9系统已经正确设置和更新。以下是基础设置步骤:

系统更新

首先,确保系统已更新到最新的软件包:

sudo dnf update -y 

安装EPEL仓库

企业Linux的额外软件包(EPEL)仓库提供了许多额外的软件包,包括一些Python相关的工具:

sudo dnf install epel-release -y 

安装基本开发工具

安装开发工具组,这将包括编译Python所需的工具:

sudo dnf groupinstall "Development Tools" -y 

安装其他必要的依赖

Python编译和运行可能需要一些额外的依赖库:

sudo dnf install openssl-devel bzip2-devel libffi-devel xz-devel -y 

完成这些基础设置后,系统已经准备好安装Python了。

Python基础安装

Rocky Linux 9默认安装了Python 3.9,但可能不包含完整的开发环境。我们将介绍如何安装系统默认的Python版本,以及如何从源代码编译安装特定版本。

检查系统已安装的Python版本

首先,检查系统是否已安装Python以及其版本:

python3 --version 

或者:

python --version 

如果系统中安装了Python,这个命令会显示Python的版本号。在Rocky Linux 9中,通常会显示Python 3.9。

使用DNF安装Python

如果系统中没有安装Python,或者需要安装/更新Python,可以使用DNF包管理器:

sudo dnf install python3 -y 

这将安装Python 3及其基本工具,包括pip(Python包安装程序)。

验证Python安装

安装完成后,验证Python是否正确安装:

python3 --version 

以及验证pip是否已安装:

pip3 --version 

设置Python命令别名

为了方便使用,可以创建一个从pythonpython3的别名:

echo "alias python='python3'" >> ~/.bashrc source ~/.bashrc 

这样,你就可以使用python命令而不是python3来运行Python 3。

从源代码编译安装Python

有时候,你可能需要安装特定版本的Python,而不是系统仓库中提供的版本。这种情况下,可以从源代码编译安装Python。

以下是从源代码安装Python 3.10作为示例:

  1. 首先,安装编译Python所需的依赖:
sudo dnf groupinstall "Development Tools" -y sudo dnf install openssl-devel bzip2-devel libffi-devel xz-devel -y 
  1. 下载Python源代码:
cd /opt sudo wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz 
  1. 解压源代码包:
sudo tar xzf Python-3.10.12.tgz 
  1. 进入解压后的目录:
cd Python-3.10.12 
  1. 配置编译选项:
sudo ./configure --enable-optimizations 

--enable-optimizations选项将优化Python二进制文件,但会增加编译时间。

  1. 编译并安装Python:
sudo make altinstall 

使用altinstall而不是install可以避免覆盖系统默认的Python版本。

  1. 验证安装:
python3.10 --version 

应该显示安装的Python版本:Python 3.10.12

多版本Python管理

在企业环境中,不同的项目可能需要不同版本的Python。因此,管理多个Python版本是一个重要的技能。以下是几种管理多版本Python的方法。

使用update-alternatives管理多版本

update-alternatives是一个在Linux系统中管理多个版本软件的工具。我们可以用它来管理多个Python版本。

  1. 首先,为已安装的Python版本创建替代项:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 

如果你从源代码安装了Python 3.10,可以添加:

sudo update-alternatives --install /usr/bin/python python /usr/local/bin/python3.10 2 
  1. 配置Python替代项:
sudo update-alternatives --config python 

这将显示一个菜单,让你选择默认的Python版本:

There are 2 programs which provide 'python'. Selection Command ----------------------------------------------- * 1 /usr/bin/python3.9 + 2 /usr/local/bin/python3.10 Enter to keep the current selection[+], or type selection number: 

输入对应的数字选择默认的Python版本。

使用pyenv管理多版本

pyenv是一个流行的Python版本管理工具,它允许你轻松安装和切换多个Python版本。

  1. 安装pyenv依赖:
sudo dnf install git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel -y 
  1. 安装pyenv:
curl https://pyenv.run | bash 
  1. 配置环境变量:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc 
  1. 重新加载shell配置:
source ~/.bashrc 
  1. 验证pyenv安装:
pyenv --version 
  1. 使用pyenv安装Python版本:
pyenv install 3.9.16 pyenv install 3.10.12 pyenv install 3.11.4 
  1. 查看已安装的Python版本:
pyenv versions 
  1. 设置全局Python版本:
pyenv global 3.10.12 
  1. 设置局部Python版本(针对当前目录):
pyenv local 3.9.16 
  1. 查看当前Python版本:
python --version 

使用SCL管理多版本

Software Collections (SCL)是另一个在RHEL衍生系统(如Rocky Linux)中管理多个软件版本的工具。

  1. 安装SCL工具集:
sudo dnf install centos-release-scl -y 
  1. 安装特定版本的Python:
sudo dnf install rh-python38 -y # 安装Python 3.8 sudo dnf install rh-python39 -y # 安装Python 3.9 
  1. 启用特定版本的Python:
scl enable rh-python38 bash 

这将在当前shell会话中启用Python 3.8。

  1. 验证Python版本:
python --version 

虚拟环境配置

Python虚拟环境允许你为不同的项目创建隔离的Python环境,每个环境都有自己的包和依赖。这是开发Python项目的最佳实践。

使用venv创建虚拟环境

Python 3.3及以上版本内置了venv模块,用于创建虚拟环境。

  1. 创建项目目录:
mkdir myproject cd myproject 
  1. 创建虚拟环境:
python -m venv venv 

这将在myproject目录下创建一个名为venv的目录,包含虚拟环境的所有文件。

  1. 激活虚拟环境:
source venv/bin/activate 

激活后,你的shell提示符将显示虚拟环境的名称,如(venv) [user@host myproject]$

  1. 在虚拟环境中安装包:
pip install requests 
  1. 查看已安装的包:
pip list 
  1. 停用虚拟环境:
deactivate 

使用virtualenv创建虚拟环境

virtualenv是一个比venv更早的工具,提供了一些额外功能。

  1. 安装virtualenv:
pip install virtualenv 
  1. 创建虚拟环境:
virtualenv myenv 
  1. 激活虚拟环境:
source myenv/bin/activate 
  1. 停用虚拟环境:
deactivate 

使用conda管理虚拟环境

Conda是一个开源的包管理系统和环境管理系统,特别适用于数据科学和科学计算。

  1. 安装Miniconda:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh 

按照提示完成安装。

  1. 重新加载shell配置:
source ~/.bashrc 
  1. 创建新环境:
conda create --name myenv python=3.10 
  1. 激活环境:
conda activate myenv 
  1. 在环境中安装包:
conda install numpy pandas 
  1. 停用环境:
conda deactivate 
  1. 列出所有环境:
conda env list 
  1. 删除环境:
conda env remove --name myenv 

依赖管理

在Python项目中,有效地管理依赖是至关重要的。以下是几种常用的依赖管理方法。

使用pip和requirements.txt

pip是Python的包安装程序,requirements.txt文件用于列出项目的依赖。

  1. 创建requirements.txt文件:
echo "requests==2.28.1" > requirements.txt echo "numpy==1.23.4" >> requirements.txt 
  1. 安装requirements.txt中的依赖:
pip install -r requirements.txt 
  1. 生成当前环境的requirements.txt:
pip freeze > requirements.txt 

使用pipenv进行依赖管理

pipenv是一个旨在将pipvirtualenv功能结合起来的工具。

  1. 安装pipenv:
pip install pipenv 
  1. 在项目目录中初始化pipenv:
cd myproject pipenv install 
  1. 安装包:
pipenv install requests 
  1. 安装开发依赖:
pipenv install --dev pytest 
  1. 激活虚拟环境:
pipenv shell 
  1. 生成Pipfile.lock:
pipenv lock 
  1. 安装Pipfile中的所有依赖:
pipenv install 

使用Poetry进行依赖管理

Poetry是一个现代的Python依赖管理和打包工具。

  1. 安装Poetry:
curl -sSL https://install.python-poetry.org | python3 - 
  1. 创建新项目:
poetry new myproject cd myproject 
  1. 添加依赖:
poetry add requests 
  1. 添加开发依赖:
poetry add --group dev pytest 
  1. 安装所有依赖:
poetry install 
  1. 激活虚拟环境:
poetry shell 
  1. 更新依赖:
poetry update 

开发环境配置

良好的开发环境可以提高开发效率。以下是配置Python开发环境的一些步骤和工具。

安装和配置IDE

Visual Studio Code

  1. 安装VS Code:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc echo -e "
nname=Visual Studio Codenbaseurl=https://packages.microsoft.com/yumrepos/vscodenenabled=1ngpgcheck=1ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/vscode.repo sudo dnf install code -y
  1. 安装Python扩展:

启动VS Code,然后按Ctrl+P,输入以下命令安装Python扩展:

ext install ms-python.python 

PyCharm

  1. 下载PyCharm:
wget https://download.jetbrains.com/python/pycharm-community-2022.2.3.tar.gz 
  1. 解压并运行:
tar -xzf pycharm-community-2022.2.3.tar.gz cd pycharm-community-2022.2.3/bin/ ./pycharm.sh 

配置Jupyter Notebook

Jupyter Notebook是一个交互式计算环境,广泛用于数据分析和科学计算。

  1. 安装Jupyter:
pip install jupyter 
  1. 生成配置文件:
jupyter notebook --generate-config 
  1. 设置密码:
jupyter notebook password 
  1. 启动Jupyter Notebook:
jupyter notebook --ip=0.0.0.0 --port=8888 

配置远程开发

有时,你可能需要在远程服务器上进行Python开发。以下是配置远程开发环境的方法。

使用SSH进行远程开发

  1. 安装OpenSSH服务器:
sudo dnf install openssh-server -y sudo systemctl start sshd sudo systemctl enable sshd 
  1. 从本地计算机连接到远程服务器:
ssh username@remote_server_ip 

使用VS Code进行远程开发

  1. 安装Remote-SSH扩展:

在VS Code中,按Ctrl+P,输入以下命令:

ext install ms-vscode-remote.remote-ssh 
  1. 配置SSH连接:

F1,输入”Remote-SSH: Open SSH Configuration File”,然后添加以下内容:

Host remote-server HostName remote_server_ip User username 
  1. 连接到远程服务器:

F1,输入”Remote-SSH: Connect to Host”,然后选择”remote-server”。

常见问题解决方案

在安装和使用Python的过程中,可能会遇到各种问题。以下是一些常见问题及其解决方案。

问题1:Command ‘python’ not found

问题描述:当尝试运行python命令时,系统提示”command not found”。

解决方案

在Rocky Linux 9中,Python 3是默认版本,但可能没有创建python命令的符号链接。你可以通过以下方式解决:

  1. 创建符号链接:
sudo alternatives --install /usr/bin/python python /usr/bin/python3 1 
  1. 或者,在你的.bashrc文件中添加别名:
echo "alias python='python3'" >> ~/.bashrc source ~/.bashrc 

问题2:SSL/TLS证书验证失败

问题描述:当使用pip安装包时,出现SSL/TLS证书验证失败的错误。

解决方案

  1. 更新证书:
sudo dnf update ca-certificates -y 
  1. 如果问题仍然存在,可以尝试使用--trusted-host选项:
pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org package_name 
  1. 或者,升级pip:
pip install --upgrade pip 

问题3:编译Python时出现”ModuleNotFoundError: No module named ‘_ctypes’”

问题描述:从源代码编译Python时,出现”ModuleNotFoundError: No module named ‘_ctypes’“错误。

解决方案

这通常是因为缺少libffi-devel包。安装它并重新编译Python:

sudo dnf install libffi-devel -y cd Python-x.y.z make clean ./configure --enable-optimizations make altinstall 

问题4:pip安装包时出现权限错误

问题描述:当使用pip安装包时,出现权限错误。

解决方案

  1. 使用--user选项安装到用户目录:
pip install --user package_name 
  1. 或者,使用虚拟环境:
python -m venv myenv source myenv/bin/activate pip install package_name 
  1. 如果必须全局安装,可以使用sudo:
sudo pip install package_name 

但请注意,使用sudo安装Python包通常不是最佳实践。

问题5:Python版本切换问题

问题描述:系统中安装了多个Python版本,但无法正确切换。

解决方案

  1. 使用update-alternatives管理Python版本:
sudo update-alternatives --config python 
  1. 或者,使用pyenv管理Python版本:
pyenv global x.y.z 
  1. 确保PATH环境变量设置正确:
echo $PATH 

确保你想要使用的Python版本的路径在PATH中位于其他Python版本之前。

问题6:虚拟环境激活失败

问题描述:尝试激活Python虚拟环境时失败。

解决方案

  1. 确保虚拟环境存在:
ls -la venv/bin/ 
  1. 检查虚拟环境的Python版本是否与系统兼容:
venv/bin/python --version 
  1. 如果虚拟环境损坏,删除并重新创建:
rm -rf venv python -m venv venv 
  1. 确保你使用正确的shell激活脚本:
# 对于bash source venv/bin/activate # 对于fish source venv/bin/activate.fish # 对于csh/tcsh source venv/bin/activate.csh 

问题7:依赖冲突

问题描述:项目中的不同包需要同一依赖的不同版本,导致冲突。

解决方案

  1. 使用虚拟环境隔离不同项目的依赖:
python -m venv project1_env source project1_env/bin/activate pip install package1 python -m venv project2_env source project2_env/bin/activate pip install package2 
  1. 使用pipenv或Poetry等工具,它们可以更好地处理依赖关系:
# 使用pipenv pipenv install package1 pipenv install package2 # 使用Poetry poetry add package1 poetry add package2 
  1. 如果必须在一个环境中解决冲突,可以尝试:
pip install package1==version1 package2==version2 

或者手动编辑requirements.txt文件,指定兼容的版本。

最佳实践

在企业环境中使用Python时,遵循一些最佳实践可以帮助你避免常见问题并提高效率。

1. 使用虚拟环境

始终为每个项目创建独立的虚拟环境,以避免依赖冲突:

python -m venv myproject_env source myproject_env/bin/activate 

2. 固定依赖版本

在项目中固定依赖版本,以确保可重现性:

pip freeze > requirements.txt 

或者使用pipenv或Poetry:

# pipenv pipenv lock # Poetry poetry lock 

3. 使用版本控制

将你的代码和依赖文件(如requirements.txt、Pipfile或pyproject.toml)纳入版本控制:

git init git add . git commit -m "Initial commit" 

4. 编写测试

为你的代码编写测试,以确保其正确性和稳定性:

pip install pytest 

创建测试文件,例如test_mycode.py

def test_myfunction(): assert myfunction(2) == 4 

运行测试:

pytest 

5. 使用代码格式化工具

使用代码格式化工具,如black,保持代码风格一致:

pip install black black mycode.py 

6. 使用代码检查工具

使用代码检查工具,如flake8,检查代码质量:

pip install flake8 flake8 mycode.py 

7. 文档化你的代码

使用文档字符串和工具如Sphinx记录你的代码:

def myfunction(x): """ This function squares the input. Args: x (int): The number to be squared. Returns: int: The square of the input. """ return x ** 2 

8. 使用CI/CD

设置持续集成/持续部署(CI/CD)流程,自动化测试和部署:

# .github/workflows/ci.yml示例 name: Python CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.9' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run tests run: | pytest 

9. 监控和日志记录

实现适当的监控和日志记录,以便及时发现和解决问题:

import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) def myfunction(x): logger.info(f"Running myfunction with input: {x}") result = x ** 2 logger.info(f"Result: {result}") return result 

10. 定期更新依赖

定期检查和更新依赖,以获得安全修复和新功能:

# 使用pip pip list --outdated # 使用pipenv pipenv update # 使用Poetry poetry update 

结论

Rocky Linux 9作为CentOS的替代品,为企业环境提供了一个稳定、可靠的操作系统平台。通过本指南,我们详细介绍了在Rocky Linux 9上安装Python的全过程,从基础安装到高级配置,包括多版本管理、依赖管理以及常见问题的解决方案。

对于系统管理员和开发人员来说,掌握这些技能对于建立和维护高效的Python开发环境至关重要。无论是使用系统包管理器安装Python,还是从源代码编译特定版本,无论是使用venvvirtualenv还是conda创建虚拟环境,无论是使用pippipenv还是Poetry管理依赖,每种方法都有其适用场景和优势。

通过遵循最佳实践,如使用虚拟环境、固定依赖版本、编写测试、使用代码格式化和检查工具、文档化代码、实施CI/CD流程以及监控和日志记录,你可以确保你的Python项目在企业环境中稳定、高效地运行。

希望本指南能够帮助你在Rocky Linux 9上成功安装和配置Python环境,并为你的开发工作提供支持。随着Python和Rocky Linux的不断发展,持续学习和探索新的工具和技术将使你能够更好地应对不断变化的需求和挑战。