因为Python是跨平台的 , 它可以运行在WindowsMac和各种Linux/Unix系统上。在Windows上写Python程序 , 放到Linux上也是能够运行的。

要开始学习Python编程 , 首先就得把Python安装到你的电脑里。安装后 , 你会得到Python解释器(就是负责运行Python程序的) , 一个命令行交互环境 , 还有一个简单的集成开发环境。

目前 , Python有两个版本 , 一个是2.x版 , 一个是3.x版 , 这两个版本是不兼容的。 3.x版越来越普及 。

2.x最后一个版本是2.7 , 很多企业为了兼容老项目依然在维护。从2020年开始 , 不在支持Python2

Python23的区别

  • 语句函数化 , 例如print(1,2)打印出1 2 , 但是2.x中意思是print语句打印元组 , 3.x中意思是函数的2 个参数

  • 整除 , 例如1/21//2 , 3.x版本中/为自然除

  • 3.xraw_input重命名为input , 不再使用raw_input

  • round函数 , 在3.xi.5的取整变为距离最近的偶数

  • 3.x字符串统一使用Unicode

  • 异常的捕获、抛出的语法改变

2015年后 , 各主要国内外大公司都已经迁移到了Python3。很多重要的Python第三方库也陆续停止了对 Python2的支持 , 所以 , Python 3已经是必须学习的版本。2018Python3的使用比例已经超过了 85%。 在公司内 , 往往老项目维护维持2.x版本暂不升级 , 新项目使用3.x开发。 开发时 , 假如使用3.5.8 , 部署时应尽量保持一致 , 不要随意升级版本 , 更不要降低版本。

官方网站下载不同平台。 https://www.python.org/downloads/

1. Linux环境安装

如果是Ubuntu等桌面系统 , 都已经更新到了Python较新的版本。但多数生产环境使用的还是红帽系 统。

CentOS7默认还是Python2.7 , 而开发环境如果是高版本Python就带来了问题。为了不破坏当前系统使用 , 甚至以后为了多个Python项目部署(这些项目使用不同Python解释器版本) , 建议使用多版本工具。

也可以考虑容器部署Python应用程序。

ubuntu2204安装最小化之后默认就已经安装了Python3.10。我这边测试centos8默认通过yum安装的版本为python3.9.21

1.1 软件包安装

1.1.1 ubuntu系统

DebianUbuntu 系统都有自己的包管理器 apt-get , 可以通过以下步骤安装最新版本的 Python

  1. 更新系统软件包列表

    sudo apt-get update
  2. 安装依赖包

    sudo apt-get install software-properties-common
  3. 添加 PythonPPA(Personal Package Archive)

    sudo add-apt-repository ppa:deadsnakes/ppa
  4. 再次更新系统软件包列表:

    sudo apt-get update
  5. 安装最新版本的Python

    sudo apt-get install python3.x

    3.x 替换为你要安装的具体版本号 , 比如 3.10

1.1.2 CentOS/Rhel系统

CentOSRHEL 系统则使用 yum 作为包管理器:

  1. 安装EPEL 安装源

    sudo yum install epel-release
  2. 安装需要的python版本, 这里需要注意 , 每个系统版本的支持pythonrpm包版本是有限的。能够安装的python版本不一定是自己需要的

    sudo yum install python3.x
    或
    sudo yum install python3x

    3.x 替换为你要安装的具体版本号 , 比如 3.10

1.2 编译安装

1.2.1 CentOS8

这里的编译安装主要是为了安装CentOS系统没有的那些python版本

  1. 下载最新版本的python二进制包

    [root@centos8-python ~]# wget https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tgz
  2. 安装CentOS系统中依赖的rpm

    dnf -y install wget gcc openssl-devel bzip2-devel libffi-devel xz-devel tk-devel make
  3. 运行编译命令

    [root@centos8-python ~]# cd Python-3.13.5
    [root@centos8-python Python-3.13.5]# ./configure --prefix=/usr/local/python-3.13 --enable-optimizations --with-lto --with-computed-gotos --with-system-ffi --enable-shared
    [root@centos8-python Python-3.13.5]# make && make altinstall 

    这里不使用install而是 altinstall 的原因是因为altinstall跳过创建 python 链接和手册页面链接 , install 将隐藏系统二进制文件和手册页面。altinstall 避免覆盖系统 Python

    如果直接使用install 会直接创建默认链接 , 在 /usr/bin 目录中创建一个名为 python的符号链接 , 指向新安装的 Python 版本。另外覆盖系统默认 Python ,如果系统中已有其他版本的 Python(如 /usr/bin/python 指向 python2.6) , make install 会覆盖该链接。

  4. 安装完成之后 , 会提示以下内容。这里是因为我们没有配置环境变量。

    image-20250731021317063

    因此这里直接配置环境变量

    [root@centos8-python ~]# cat /etc/profile
    PYTHON_HOME=/usr/local/python-3.13/
    export PATH=$PATH:$PYTHON_HOME/bin
    [root@centos8-python ~]# source /etc/profile
  5. 配置共享库。因为安装过程中使用make altinstall命令 , 因此安装过程中不会覆盖原本的配置。因此如果原本的环境中如果没有Python。直接配置环境变量 ,运行python命令会提示如下报错

    [root@centos8-python Python-3.13.5]# python3.13 
    python3.13: error while loading shared libraries: libpython3.13.so.1.0: cannot open shared object file: No such file or directory

    因此这里有三种解决办法

    • 方案 1:使用 ldconfig(适用于单一 Python 版本)

      如果系统只有 一个主要的 Python 版本 , 可以手动将 libpython3.x.so.1.0 添加到动态库搜索路径:

      [root@centos8-python Python-3.13.5]# echo "/usr/local/python-3.13/lib/" > /etc/ld.so.conf.d/python313.conf
      [root@centos8-python Python-3.13.5]# cat /etc/ld.so.conf.d/python313.conf
      /usr/local/python-3.13/lib/
      [root@centos8-python Python-3.13.5]# ldconfig

      然后验证库是否已正确注册:

      [root@centos8-python ~]# ldconfig -p | grep libpython
          libpython3.13.so.1.0 (libc6,x86-64) => /usr/local/python-3.13/lib/libpython3.13.so.1.0
          libpython3.13.so (libc6,x86-64) => /usr/local/python-3.13/lib/libpython3.13.so
          libpython3.6m.so.1.0 (libc6,x86-64) => /lib64/libpython3.6m.so.1.0
          libpython3.so (libc6,x86-64) => /usr/local/python-3.13/lib/libpython3.so
          libpython3.so (libc6,x86-64) => /lib64/libpython3.so

      这里有明显的缺点

      • 如果有多个 Python 版本 , 可能会导致动态库冲突

      • 不能保证每个 Python 版本都能正确找到自己的 libpython3.x.so.1.0

    • 使用 LD_LIBRARY_PATH(适用于手动切换 Python)

      [root@centos8-python ~]# export LD_LIBRARY_PATH=/usr/local/python-3.13/lib/:$LD_LIBRARY_PATH
      [root@centos8-python ~]#/usr/local/python-3.13/bin/python3.13

      如果希望 每次自动生效 , 可以将这行命令添加到 /etc/profile

      [root@centos8-python ~]# echo "export LD_LIBRARY_PATH=/usr/local/python-3.13/lib/:$LD_LIBRARY_PATH" >> /etc/profile

      这里也有缺点。

      • 每次切换 Python 版本时都需要手动修改 LD_LIBRARY_PATH

      • 影响当前终端 session , 不适用于长期维护多个 Python 版本的环境。

    • 使用 RPATH

      适用于多个 Python 版本共存 , 每个 Python 版本独立运行 , 不影响其他版本。

      为什么选择 RPATH?

      • 每个 Python 版本可以自己找到自己的 libpython3.x.so.1.0 , 不会相互干扰。

      • 不需要手动 export LD_LIBRARY_PATH , 运行时自动找到库文件。

      • 不会影响系统的全局 ldconfig 配置 , 避免潜在的库冲突。

      直接修改 Python 可执行文件的 RPATH

      [root@centos8-python ~]# patchelf --set-rpath /usr/local/python-3.13/lib/ /usr/local/python-3.13/bin/python3.13

      如果没有安装patchelf命令 ,运行以下命令安装

      # Ubuntu/Debian
      sudo apt install patchelf
      # CentOS/Fedora
      sudo yum install patchelf
      ​

      之后输入以下命令验证库文件是否配置正常

      [root@centos8-python ~]# ldd /usr/local/python-3.13/bin/python3.13 | grep libpython
          libpython3.13.so.1.0 => /usr/local/python-3.13/lib/libpython3.13.so.1.0 (0x00007f0749001000)

      方案

      适用场景

      是否永久

      适用多个 Python

      隔离性

      复杂度

      方案 1:使用 ldconfig

      只有一个 Python 版本

      ✅ 是

      ⚠ 可能有冲突

      ❌ 低隔离

      方案 2:使用 LD_LIBRARY_PATH

      需要手动切换 Python 版本

      ❌ 否

      ✅ 支持

      ✅ 高隔离

      ⭐⭐

      方案 3:使用 RPATH

      多个 Python 版本共存

      ✅ 是

      ✅ 支持

      ✅ 高隔离

      ⭐⭐⭐

1.2.2 Ubuntu

  1. 安装依赖包

    root@ubuntu2204:~# 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 liblzma-dev tk-dev
  2. 下载源码包·

    root@ubuntu2204:~# wget https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tgz
    root@ubuntu2204:~# tar -xf Python-3.13.5.tgz
    root@ubuntu2204:~# cd Python-3.13.5/
  3. 编译安装

    root@ubuntu2204:~/Python-3.13.5# ./configure --prefix=/usr/local/python-3.13 --enable-optimizations --with-lto --with-computed-gotos --with-system-ffi --enable-shared
    root@ubuntu2204:~/Python-3.13.5# make -j 4 && make altinstall
  4. 这里直接安装成功了, 后续直接按照CentOS的编译流程配置环境变量和库信息即可

    root@ubuntu2204:~/Python-3.13.5# cat /etc/profile
    PYTHON_HOME=/usr/local/python-3.13/
    export PATH=$PATH:$PYTHON_HOME/bin
    root@ubuntu2204:~/Python-3.13.5# source /etc/profile
    root@ubuntu2204:~/Python-3.13.5# apt install patchelf
    root@ubuntu2204:~/Python-3.13.5# patchelf --set-rpath /usr/local/python-3.13/lib/ /usr/local/python-3.13/bin/python3.13

1.3 版本切换

Linux系统中提供了一个alternatives内置命令 , 即最小化安装也有该命令 , 用于在多个同功能的软件 , 或软件的多个不同版本间选择、切换。简单来说就是版本切换控制。例如 , 你的操作系统有多个Python版本 , 例如python3.6,Python 3.9,如果不用alternatives命令 , 那么你可能需要通过手工修改软链接来实现Python版本的切换。如果用alternatives命令就可以很容易的实现Python版本的切换和管理。

另外 , 关于命令alternativesupdate-alternatives的关系 , 其实先有update-alternatives命令 , 然后才有alternatives , update-alternatives最开始是Debian Linux下的一个项目 , 用于管理多版本 , 它是Perl编写的 , 然后RHEL重写了这个项目 , 名字也改为了alternatives , alternatives则在基于Fedora的分发版本(Redhat, CentOS)中发行 , 传播 , 而update-alternatives一般存在Debian Linux下。但是为了统一或者方便 , 在RHEL下你也会看到update-alternatives这个命令 , 它此时实际上是一个软链接 , 指向alternatives命令。

语法 :

[root@host-192-168-71-25 ~]# alternatives --help
alternatives version 1.24 - Copyright (C) 2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.
​
usage: alternatives --install <link> <name> <path> <priority>
                    [--initscript <service>]
                    [--family <family>]
                    [--follower <follower_link> <follower_name> <follower_path>]*
       alternatives --remove <name> <path>
       alternatives --auto <name>
       alternatives --config <name>
       alternatives --display <name>
       alternatives --set <name> <path/family>
       alternatives --list
       alternatives --remove-all <name>
       alternatives --add-follower <name> <path> <follower_link> <follower_name> <follower_path>
       alternatives --remove-follower <name> <path> <follower_name>
​
common options: --verbose --test --help --usage --version --keep-missing --keep-foreign
                --altdir <directory> --admindir <directory>
​

主要常使用参数是installremoveconfigdisplaylist这5个参数

  • install :生成新的软链接

  • remove : 删除软链接

  • config : 使用交互方式选择软连接

  • display : 显示软连接

  • list : 显示所有软连接

  • set : 使用非交互方式选择软连接

这里默认情况下没有关于python3的相关配置 , 因此需要使用以下命令手动指定python3的链接文件 , 设置过程中优先级越高, 链接为默认选项。

[root@host-192-168-71-25 ~]# alternatives --install /usr/bin/python python3 /usr/bin/python3.11 300
[root@host-192-168-71-25 ~]# alternatives --install /usr/bin/python python3 /usr/bin/python3.12 400

配置完成之后, 实际显示效果如下

[root@host-192-168-71-25 ~]# alternatives --display python3
python3 - status is auto.
 link currently points to /usr/bin/python3.12
/usr/bin/python3.11 - priority 300
/usr/bin/python3.12 - priority 400
Current `best' version is /usr/bin/python3.12.
​
[root@host-192-168-71-25 ~]# alternatives --list 
libnssckbi.so.x86_64    auto    /usr/lib64/pkcs11/p11-kit-trust.so
soelim                  auto    /usr/bin/soelim.groff
cifs-idmap-plugin       auto    /usr/lib64/cifs-utils/cifs_idmap_sss.so
iptables                auto    /usr/sbin/iptables-nft
ebtables                auto    /usr/sbin/ebtables-nft
arptables               auto    /usr/sbin/arptables-nft
ld                      auto    /usr/bin/ld.bfd
man                     auto    /usr/bin/man.man-db
nc                      auto    /usr/bin/ncat
man.7.gz                auto    /usr/share/man/man7/man.man-pages.7.gz
python3                 auto    /usr/bin/python3.11

可以通过以下两种方式实现命令切换python3的版本信息

[root@host-192-168-71-25 ~]# alternatives --config python3
​
There are 2 programs which provide 'python3'.
​
  Selection    Command
-----------------------------------------------
   1           /usr/bin/python3.11
*+ 2           /usr/bin/python3.12
​
Enter to keep the current selection[+], or type selection number: 1
[root@host-192-168-71-25 ~]# python
Python 3.11.11 (main, Jun 20 2025, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[root@host-192-168-71-25 ~]# alternatives --set python3 /usr/bin/python3.12 
[root@host-192-168-71-25 ~]# python
Python 3.12.9 (main, Jun 20 2025, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
​
​

使用命令查看文件

[root@host-192-168-71-25 ~]# ll /etc/alternatives/python3 
lrwxrwxrwx 1 root root 19 Aug  7 01:08 /etc/alternatives/python3 -> /usr/bin/python3.12
[root@host-192-168-71-25 ~]# ll /usr/bin/python
lrwxrwxrwx 1 root root 25 Aug  7 01:01 /usr/bin/python -> /etc/alternatives/python3

我们看到alternatvies其实是通过多一层软链接 , 例如 , /usr/bin/python指向/etc/alternatives/python3 , 这一层关系不变 , 切换python版本时 , 我们看到链接/etc/alternatives/python3 指向了不同的python版本来实现的。

alternatives 还有另外一个数据库目录:/var/lib/alternative。注册一条记录后 , 会在 /var/lib/alternatives/<name> 生成 INI 格式文件 ; alternatives 每次操作都会原子级更新软链。

[root@host-192-168-71-25 ~]# ll /var/lib/alternatives/
total 44
-rw-r--r--. 1 root root 584 Sep  5  2024 arptables
-rw-r--r--. 1 root root  78 Sep  5  2024 cifs-idmap-plugin
-rw-r--r--. 1 root root 277 Sep  5  2024 ebtables
-rw-r--r--. 1 root root 393 Sep  5  2024 iptables
-rw-r--r--. 1 root root  57 Sep  5  2024 ld
-rw-r--r--. 1 root root  69 Sep  5  2024 libnssckbi.so.x86_64
-rw-r--r--. 1 root root 381 Sep  5  2024 man
-rw-r--r--. 1 root root  78 Sep  5  2024 man.7.gz
-rw-r--r--. 1 root root 100 Sep  5  2024 nc
-rw-r--r--  1 root root  72 Aug  7 01:08 python3
-rw-r--r--. 1 root root 130 Sep  5  2024 soelim
[root@host-192-168-71-25 ~]# cat /var/lib/alternatives/python3 
manual
/usr/bin/python
​
/usr/bin/python3.11
300
/usr/bin/python3.12
400
​

2. Window 环境安装

这里windows如果需要安装python, 直接在python官网下载对应的windows版本

image-20250808001723065

2.1 python安装

  1. 这里选择Add python.exe to PATH ,之后点击Customize installation

    image-20250808002759477

  2. 默认选择所有, 直接点击Next即可

    image-20250808003220229

  3. 这里选择要安装的目录路径

    image-20250808003452038

  4. 建议点击 Disable path length limit 选项

    建议启用该选项 , 避免后续程序运行时 , 因为路径超长而出现报错

    如果未勾选该选项 , 将注册表的如下键值 , 从 0 改成 1 即可(本选项实际上是修改了 NTFS filesystem 的默认显示。在 windows 系统上 , 该限制是默认开启的。0 代表开启限制 , 即 false , 1 代表关闭限制 , 即 true

    Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled

    image-20250808003844825

之后安装成功。这里需要注意,WindowsLinux读取path的方式不太一样。Windowspath路径默认选择当前的路径, 当前路径没有再找path路径。Linux中会直接读取path路径

image-20250808005007542

2.2 pycharm安装

pycharm官网:PyCharm: The only Python IDE you need

  1. Pycharm官网下载对应的软件, 需要注意Pycharm最新版本2025.2中的 profession 版本和community版本已经合并了。

    image-20250808005833326

    image-20250808005924173

  2. 双击下载的软件包, 之后直接点击下一步

    image-20250808010514027

    image-20250808010912893

    image-20250808010951439

  3. 这里直接点击对应的桌面Pycharm快捷图标, 首次进入会提示语言和区域

    image-20250808011633001

    之后选择创建对应的python项目即可

    image-20250808013637120

    创建过程中需要选择对应的Python解释器

    image-20250808014332110

之后直接使用即可


参考链接

linux如何安装python最新版本 – PingCode

解决 Python 找不到 libpython3.x.so.1.0 问题的几种方案 Python实战经验编程笔记TendCode

Python多环境管理神器(pyenv) - doublexi - 博客园

Linux下alternatives命令学习总结 - 潇湘隐者 - 博客园


熊熊