我的系统上安装了多个版本的 Python:
我可以在 Python 3.12 和 3.11 中执行“import ssl”,但在 Python3.10 中出现以下错误:
[user@computer ~]$ python3.10
Python 3.10.14 (main, Jun 21 2024, 12:39:03) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.10/ssl.py", line 99, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: libssl.so.1.1: cannot open shared object file: No such file or directory
>>> exit()
不确定此信息是否有帮助,但我正在使用 Ansible 在 Rocky Linux 上进行这些安装。 对于 OpenSSL、Python3.11 和 Python3.12,我正在安装 DNF
---
- name: Installing Packages via DNF
ansible.builtin.dnf:
name:
- openssl
- python3.11
- python3.11-pip
- python3.12
- python3.12-pip
state: present
...
至于Python3.10.14,我是手动安装的
---
- name: Create Directory /usr/bin/
ansible.builtin.file:
path: /usr/bin/
state: directory
- name: Unarchive Python 3.10.14 Tar File into /usr/bin
ansible.builtin.unarchive:
src: 'https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tar.xz'
dest: /usr/bin/
remote_src: yes
- name: Configure Python 3.10.14
ansible.builtin.shell:
cmd: 'cd /usr/bin/Python-3.10.14/; ./configure --enable-optimizations'
- name: Install Python 3.10.14 via Make
ansible.builtin.shell:
cmd: 'cd /usr/bin/Python-3.10.14/; make -j 2 ; nproc ; make altinstall ;'
...
sudo dnf update -y
首先,您需要安装编译 Python 3.10.14 所需的一些依赖项
# Python 3.10.14 Dependencies
sudo dnf install -y \
wget \
tk-devel \
xz-devel \
zlib-devel \
openssl-devel \
sqlite-devel \
libffi-devel \
readline-devel \
libnsl2 \
libffi-devel \
bzip2-devel \
pip \
# Development Tools Mandatory
dnf groupinstall "Development Tools" -y
cd /usr/local/bin
wget install https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tar.xz
tar -xvf Python-3.10.14.tar.xz
配置脚本负责准备在您的特定系统上构建软件。它确保构建和安装过程的其余部分的所有依赖项都可用,并找出使用这些依赖项需要知道的任何信息。
Unix 程序通常是用 C 编写的,因此我们通常需要 C 编译器来构建它们。在这些情况下,配置脚本将确定您的系统确实有 C 编译器,并找出它的名称以及在哪里可以找到它。
cd /usr/local/bin/Python-3.10.14
./configure --with-openssl=/usr --enable-optimizations
注意:这里的关键是将
--with-openssl
指向 /usr
目录,而不是 /usr/lib/ssl
或 /usr/bin/ssl
configure 完成其工作后,我们可以调用 make 来构建软件。这会运行 Makefile 中定义的一系列任务,以从源代码构建完成的程序。
您下载的 tarball 通常不包含完成的 Makefile。相反,它附带一个名为 Makefile.in 的模板,并且配置脚本会生成特定于您的系统的自定义 Makefile。
make -j 2
现在软件已构建并准备运行,可以将文件复制到最终目的地。 make install 命令会将构建的程序及其库和文档复制到正确的位置。
这通常意味着程序的二进制文件将被复制到您的 PATH 上的目录,程序的手册页将被复制到您的 MANPATH 上的目录,并且它依赖的任何其他文件将被安全地存储在适当的位置。
由于安装步骤也在 Makefile 中定义,因此软件的安装位置可以根据传递给配置脚本的选项或配置脚本发现的有关系统的信息而更改。
根据软件的安装位置,您可能需要升级此步骤的权限,以便可以将文件复制到系统目录。使用 sudo 通常就能解决问题。
make test
make altinstall
/usr/local/bin/python3.10 -c "import ssl; print(ssl.OPENSSL_VERSION)"