找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3123

积分

0

好友

418

主题
发表于 2 小时前 | 查看: 4| 回复: 0

在 Linux 系统上部署 Python 环境时,你是否也厌倦了系统自带版本过旧、pip 网络连接失败或是各种恼人的权限报错?直接使用包管理器安装虽然简单,但往往无法获得所需的特定版本或最新特性。本文将手把手带你完成从源码编译安装 Python 的全过程,涵盖从下载、解决依赖、编译安装到环境配置的每一个细节。更重要的是,我们还将深入解决两个常见“坑点”:升级 OpenSSL 以解决 SSL 证书错误,以及配置虚拟环境来隔离项目依赖。跟随步骤,即使是新手也能一次成功,构建一个干净、可控的 Python 开发环境。

一、第一步:下载 Python 源码

首先需要获取目标版本的 Python 源码包。我们推荐使用 Python 3.8 及以上版本,它们在稳定性、功能与新特性之间取得了较好的平衡。

两种下载方式(任选其一)

  • 方式 1:通过浏览器下载
    访问 Python 官网的源码发布页面:https://www.python.org/ftp/python/,找到你需要的版本目录(例如 3.8.3),下载 Gzipped source tarball 格式的压缩包(通常名为 Python-3.8.3.tgz)。

    Python官网稳定版本下载页面截图

  • 方式 2:通过终端命令下载(推荐,尤其适用于无图形界面的服务器)
    在终端中使用 wget 命令直接下载,效率更高。以下载 3.8.3 版本为例:

    # 以3.8.3版本为例,可替换为你需要的版本号
    wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz

解压源码包
下载完成后,使用 tar 命令解压,会生成一个同名的源码目录:

tar -xvf Python-3.8.3.tgz

进入源码目录
后续的配置和编译步骤都需要在此目录下进行:

cd Python-3.8.3

二、关键前置:安装依赖库(必做!否则编译报错)

编译 Python 源码需要一系列开发工具和库文件的支持。如果缺失依赖,编译过程很可能会失败。请根据你的 Linux 发行版执行对应的安装命令:

系统类型 安装依赖命令
Ubuntu/Debian sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
Fedora/CentOS sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel

注意:对于 CentOS 7 等较旧的系统,可能需要先更新 yum 源,以确保能找到所有必要的依赖包。

三、核心步骤:编译并安装 Python

这一步需要明确区分“源码目录”和“安装目录”:

  • 源码目录:即上一步解压得到的 Python-3.8.3 文件夹,里面是 Python 的源代码。
  • 安装目录:Python 最终被安装到系统中的位置,我们将自定义此路径。

3.1 创建安装目录

为了避免与系统自带的 Python 发生冲突,建议将新 Python 安装到 /opt 目录下,这是存放第三方可选应用软件的常用位置。例如,我们为 Python 3.8 创建一个专属目录:

sudo mkdir /opt/python3.8

3.2 执行 configure 配置(关键参数别漏!)

在源码目录下,执行 ./configure 命令来生成编译所需的 Makefile 文件。这里有两个关键参数必须添加

  • --prefix=/opt/python3.8:指定安装目录为我们刚刚创建的路径。
  • --with-ssl-default-suites=openssl:确保 Python 内置的 pip 等工具能正确使用 OpenSSL 进行网络连接,避免后续出现 SSL 相关问题。

完整命令如下:

./configure --with-ssl-default-suites=openssl --prefix=/opt/python3.8

如果命令执行后没有报错,你会在当前目录看到生成的 Makefile 文件,这表示配置成功。

3.3 编译源码(请耐心等待)

现在,使用 make 命令开始编译源代码。这个过程耗时取决于服务器的 CPU 性能和内核数量,通常需要 1 到 5 分钟。

make

提示:如果编译过程中出现错误,大概率是第二步的依赖库没有安装完整。请根据报错信息回溯,安装对应的依赖包。

3.4 安装 Python(需要 sudo 权限)

编译成功后,执行 make install 命令,将编译好的 Python 安装到之前指定的 /opt/python3.8 目录。

sudo make install

验证安装
安装完成后,可以进入安装目录的 bin 文件夹,尝试启动 Python 解释器来验证是否成功:

# 进入安装目录的bin文件夹
cd /opt/python3.8/bin

# 启动Python
./python3

# 会显示Python版本信息,如下:
# Python 3.8.3 (default, Jun 21 2020, 16:34:59)
# [GCC 5.4.0 20160609] on linux
# Type "help", "copyright", "credits" or "license" for more information.
# >>>

终端中成功运行新安装的Python 3.8.3解释器

四、配置环境:随时随地启动新 Python

虽然 Python 已经安装好了,但每次都需要输入完整路径才能启动显然不够方便。我们需要配置系统环境,让在任意位置输入 python 命令时,都能启动我们新安装的版本。

4.1 先处理系统旧的 Python 软链接

许多 Linux 系统(如 CentOS 7)默认将 python 命令链接到 Python 2.7。我们需要先移除这个旧链接。

# 1. 查看旧链接指向(确认是旧版本再删)
ls -l /usr/bin/python
# 会显示类似:lrwxrwxrwx 1 root root 7 Jun  1  2022 /usr/bin/python -> python2.7

# 2. 删除旧链接
sudo rm /usr/bin/python

4.2 建立新的软链接(指向新 Python)

将我们新安装的 Python 3.8 链接到系统的命令路径 /usr/bin/python

sudo ln -s /opt/python3.8/bin/python3 /usr/bin/python

验证:现在,在任何目录下执行 python --version,应该显示 Python 3.8.3

4.3 配置 pip(避免和旧版本冲突)

系统可能也存在旧的 pip 命令。我们需要让全局的 pip 指向新 Python 自带的 pip3

# 1. 删除旧pip链接(如果有的话)
sudo rm /usr/bin/pip

# 2. 建立新pip链接(指向新Python的pip3)
sudo ln -s /opt/python3.8/bin/pip3 /usr/bin/pip

验证:执行 pip --version,输出应包含 from /opt/python3.8/lib/python3.8/site-packages/pip (python 3.8)

五、避坑补充:解决 pip 安装库的 “权限报错”

在使用 pip install 安装 Python 包时,可能会遇到 Permission denied 错误。常规的解决方法是加 sudo,但这会将包安装到系统目录,可能污染环境。更安全优雅的做法是使用 --user 参数。

# 示例:安装numpy,加--user指定安装到当前用户目录
pip install --user numpy

添加 --user 参数后,包会被安装到用户主目录下的 ~/.local/lib/python3.8/site-packages。首次使用后,后续的 pip install 命令(在不加 sudo 的情况下)通常会默认采用用户级安装,不会再出现权限问题。

六、进阶:升级 OpenSSL(解决 Python SSL 报错)

如果你在执行 pip 命令时遇到诸如 SSL: CERTIFICATE_VERIFY_FAILED 的错误,很可能是系统自带的 OpenSSL 版本太旧(例如 CentOS 7 默认是 1.0.2),与新版 Python 不兼容。此时需要手动升级 OpenSSL。

  1. 查看当前 OpenSSL 版本

    openssl version
    # 旧系统可能显示:OpenSSL 1.0.2k-fips  26 Jan 2017
  2. 下载并解压 OpenSSL 1.1.1 源码

    wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
    tar -xzvf openssl-1.1.1k.tar.gz
    cd openssl-1.1.1k
  3. 编译安装 OpenSSL

    # 配置安装目录
    ./config --prefix=/usr/local/openssl
    # 编译并安装
    make && sudo make install
  4. 替换系统旧 OpenSSL

    # 备份旧版本
    sudo mv /usr/bin/openssl /usr/bin/openssl.bak
    sudo mv /usr/include/openssl /usr/include/openssl.bak
    
    # 建立新链接
    sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
    sudo ln -s /usr/local/openssl/include/openssl /usr/include/openssl
    
    # 更新动态链接库
    echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
    sudo ldconfig -v
  5. 验证升级

    # 重启终端后执行
    openssl version
    # 显示:OpenSSL 1.1.1k  25 Mar 2021 即成功

    升级 OpenSSL 是解决许多网络连接相关问题的基础,完成后之前遇到的 Python SSL 错误通常会自动消失。

七、实用工具:配置 Python 虚拟环境(避免库冲突)

在开发不同项目时,各项目所需的第三方库及其版本可能相互冲突。使用虚拟环境(Virtual Environment)为每个项目创建独立的 Python 运行环境是最佳实践。我们将使用 virtualenv 这个工具,你可以在云栈社区的 Python 板块找到更多关于虚拟环境管理的讨论。

  1. 全局安装 virtualenv(仅需一次)

    pip install virtualenv
  2. 创建虚拟环境(可指定 Python 版本)

    # 示例:创建名为myenv的环境,指定用Python 3.8
    virtualenv -p python3.8 myenv
  3. 激活 / 退出虚拟环境

    # 激活(激活后终端前缀会显示(myenv))
    source myenv/bin/activate
    
    # 退出(回到系统全局环境)
    deactivate
  4. 删除虚拟环境
    虚拟环境本质上就是一个文件夹,删除即可:

    rm -rf myenv

八、常用 pip 命令整理(收藏备用)

掌握一些高效的 pip 命令能极大提升运维和开发效率:

# 1. 导出当前环境的所有库及版本
pip freeze > requirements.txt

# 2. 下载库到指定目录(用于离线安装)
pip download -d 你的目录路径 -r requirements.txt -i https://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple

# 3. 批量卸载库
pip uninstall -r requirements.txt -y

# 4. 离线安装库(从下载好的目录安装)
pip install --no-index --find-links=你的目录路径 -r requirements.txt

至此,你已经成功在 Linux 系统上通过源码编译方式安装并配置好了全新的 Python 环境,同时掌握了解决 OpenSSL 兼容性和管理项目依赖的虚拟环境技能。这个过程虽然步骤稍多,但能给你带来对 Python 环境更深入的理解和完全的控制权。如果在操作中遇到任何问题,例如特定的编译错误或链接失败,建议详细记录你的系统版本和完整的错误信息,这将有助于快速定位问题根源。




上一篇:RF-DETR:开源实时目标检测模型,比YOLO更快更准的Transformer新选择
下一篇:知识图谱存储优化:基于强化学习的双存储结构如何应对大规模数据挑战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-11 10:07 , Processed in 0.750811 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表