惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
博客园_首页
博客园 - 【当耐特】
V
Visual Studio Blog
博客园 - 叶小钗
月光博客
月光博客
美团技术团队
J
Java Code Geeks
小众软件
小众软件
Y
Y Combinator Blog
博客园 - Franky
Martin Fowler
Martin Fowler
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG

泠泫凝的异次元空间

通过串口安装Linux | 泠泫凝的异次元空间 curl自编译 | 泠泫凝的异次元空间 Minecraft 认证服务器代理 | 泠泫凝的异次元空间 飞塔分流配置实战 | 泠泫凝的异次元空间 Windows 安全启动证书检查 | 泠泫凝的异次元空间 Lxn-OneDriveCLI | 泠泫凝的异次元空间 华三交换机配置 ERPS 环网 | 泠泫凝的异次元空间 PVE 配置 VLAN 感知 | 泠泫凝的异次元空间 MT7922 无线网卡安装 | 泠泫凝的异次元空间 无显示输出 Linux 主机配置桌面显示 | 泠泫凝的异次元空间 Wireguard 部署 SOP 手册(自用) | 泠泫凝的异次元空间 Zabbix 7.4 通过钉钉发送告警提醒 | 泠泫凝的异次元空间 Debian with xfce 通过 VNC 共享屏幕 华三S6860 IRF堆叠 | 泠泫凝的异次元空间 iPad 应用侧载 | 泠泫凝的异次元空间 Smart DNS 分区解析 | 泠泫凝的异次元空间 建立 NFS 服务器并挂载到客户端 | 泠泫凝的异次元空间 将 Android 以 MTP 方式连接至 Debian PVE 虚拟机迁移至 vCenter | 泠泫凝的异次元空间 vCenter 虚拟机迁移至 PVE | 泠泫凝的异次元空间 PVE迁移时提示密钥验证失败 | 泠泫凝的异次元空间 修改Windows设备设置区域 | 泠泫凝的异次元空间 恢复 SecureCRT 7.x 保存的密码 | 泠泫凝的异次元空间 PVE 超融合下电与上电流程 | 泠泫凝的异次元空间 记一次Zabbix异常处理 | 泠泫凝的异次元空间 苹果设备保存SHSH2 | 泠泫凝的异次元空间 PVE超融合部署 | 泠泫凝的异次元空间 树莓派启用zram | 泠泫凝的异次元空间 在 Hyper-V 上安装 EVE-NG | 泠泫凝的异次元空间 Zabbix 部署与 Windows 硬件信息收集 | 泠泫凝的异次元空间
Ubuntu 下 Python 编译安装及关联问题解决 | 泠泫凝的异次元空间
Lxn's Area · 2023-07-17 · via 泠泫凝的异次元空间

在 Ubuntu 下从源码编译安装 Python 并解决一些依赖问题。

其实遇到的问题主要也就是依赖问腿。

编译与安装

  1. 下载源码包:
    打开Python Distribution,在里面选择版本然后下载源码包,这里以3.10.12版本为例。
    1
    wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
  2. 安装必要依赖:
    1
    2
    apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev \
    libssl-dev libreadline-dev libffi-dev -y
  3. 解压源码包:
    1
    2
    tar -zxvf Python-3.10.12.tgz
    cd Python-3.10.12/
  4. 启用编译优化
    1
    ./configure --enable-optimizations
  5. 编译与安装
    1
    2
    make -j20
    make altinstall
    其中线程数(-j)需要根据实际情况调整,一般来说该值等于CPU核心数。
  6. 测试
    测试一下看一下是否正确安装
    1
    python3.10 --version
    有返回版本号即为正确安装

创建别名与解决问题

创建别名后主要遇到的问题是Ubuntu中默认会自带一个Python供apt等系统程序使用,这里我们变更了版本之后或是不兼容或是指向性不明确总之系统程序无法再正确调用Python,思路也很简单要么把别名变更回去,要么修改系统程序的脚本文件头,修改为原来的版本。

创建别名

  1. 首先看一下是否存在之前的配置:
    1
    update-alternatives --config python3
    这里执行后应该是返回update-alternatives: error: no alternatives for python3
  2. 找一下二进制文件安装位置
    1
    whereis python3.10
    返回中寻找路径
    1
    python3: /usr/bin/python3 /usr/bin/python3.8 /usr/lib/python3.9 /usr/lib/python3 /usr/lib/python3.8 /etc/python3 /etc/python3.8 /usr/local/bin/python3.10-config /usr/local/bin/python3.10 /usr/local/lib/python3.10 /usr/local/lib/python3.8 /usr/share/python3 /usr/share/man/man1/python3.1.gz
    这里就是/usr/local/bin/python3.10
  3. 安装别名
    1
    2
    update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 3
    update-alternatives --install /usr/bin/python python /usr/local/bin/python3.10 3
    此时可以输入python -Vpython3 -V查看是否能正常返回版本号
  4. 用同样的方法寻找pip的二进制文件安装位置,然后添加别名:
    1
    2
    update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.10 3
    update-alternatives --install /usr/bin/pip3 pip3 /usr/local/bin/pip3.10 3
    此时可以输入pip -Vpip3 -V查看是否能正常返回版本号

问题解决

添加完别名后使用apt安装程序,这个时候可能会报错:

1
2
3
4
5
6
7
8
9
10
11
12
root@machine:/usr/lib/python3/dist-packages# apt update
Hit:1 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal InRelease
Hit:2 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal-updates InRelease
Hit:3 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal-backports InRelease
Hit:4 http://mirrors4.tuna.tsinghua.edu.cn/ubuntu focal-security InRelease
Traceback (most recent call last):
File "/usr/lib/cnf-update-db", line 8, in <module>
from CommandNotFound.db.creator import DbCreator
ModuleNotFoundError: No module named 'CommandNotFound'
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

打开第七行中的脚本即/usr/lib/cnf-update-db,可以看到该脚本的文件头是以#!/usr/bin/python3开头的,给他改成#!/usr/bin/python3.8即可。

1
2
3
4
5
6
7


import glob
import logging
import os
import sys
...

之后再遇见类似问题均如此解决即可。另外顺带提一句,我这里是Ubuntu 20.04,其他版本自带的Python版本可能不一样,建议提前看好。

 上一篇

Linux ubuntu Python