在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' 出错问题的解决方法

本文解决Ubuntu16.04.6LTS升级Python至3.7后,使用pip安装模块时出现的错误。通过复制lsb_release模块和调整CommandNotFound目录,修复了User-Agent生成时的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' returned non-zero exit status 1问题解决方法

我在Ubuntu 16.04.6 LTS中将python3的版本由3.5升级到3.7.3,在安装任何模块时,比如执行下面的命令

sudo pip3 install you-get

就会出现下面的错误

Traceback (most recent call last):
  File "/usr/bin/pip3", line 10, in <module>
    sys.exit(main())
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_internal/__init__.py", line 78, in main
    return command.main(cmd_args)
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 228, in main
    timeout=min(5, options.timeout)
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_internal/cli/base_command.py", line 93, in _build_session
    insecure_hosts=options.trusted_hosts,
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_internal/download.py", line 344, in __init__
    self.headers["User-Agent"] = user_agent()
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_internal/download.py", line 108, in user_agent
    zip(["name", "version", "id"], distro.linux_distribution()),
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_vendor/distro.py", line 120, in linux_distribution
    return _distro.linux_distribution(full_distribution_name)
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_vendor/distro.py", line 675, in linux_distribution
    self.version(),
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_vendor/distro.py", line 735, in version
    self.lsb_release_attr('release'),
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_vendor/distro.py", line 892, in lsb_release_attr
    return self._lsb_release_info.get(attribute, '')
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_vendor/distro.py", line 550, in __get__
    ret = obj.__dict__[self._fname] = self._f(obj)
  File "/usr/local/python3/lib/python3.7/site-packages/pip/_vendor/distro.py", line 998, in _lsb_release_info
    stdout = subprocess.check_output(cmd, stderr=devnull)
  File "/usr/local/python3/lib/python3.7/subprocess.py", line 395, in check_output
    **kwargs).stdout
  File "/usr/local/python3/lib/python3.7/subprocess.py", line 487, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.

原因是找不到lsb_release模块

解决方法:
找到lsb_release模块所在的目录,将其复制到设置python3.7的系统模块加载位置,也就是报错处subprocess.py所在的目录
/usr/local/python3/lib/python3.7/

依次执行下面的命令:
sudo find / -name 'lsb_release.py'
结果如下:
/usr/lib/python2.7/dist-packages/lsb_release.py
/usr/lib/python3/dist-packages/lsb_release.py
/usr/share/pyshared/lsb_release.py


sudo cp  /usr/share/pyshared/lsb_release.py /usr/local/python3/lib/python3.7/

同时还需要将CommandNotFound所在的目录复制到上面相同的目录下面

sudo cp -fr /usr/lib/python3/dist-packages/CommandNotFound   /usr/local/python3/lib/python3.7/

将__pycache__子目录中的文件名中带有35名字的文件更改为37,见下面截图

然后再次执行上面的命令就OK了。

需要说明的是,网上参考文献[2]中说,执行下面的命令也可以解决这个问题:

sudo rm /usr/bin/lsb_release

我个人不赞成这么做,因为这破坏了系统的完整性,将系统中的这个命令删去了。

注意:系统重启后会造成gnome-terminal无法启动的坑

参见下一篇博文修正:

https://blog.youkuaiyun.com/tao_627/article/details/91042809

参考文献
[1].https://www.jianshu.com/p/3a2877edebe8
[2].https://www.cnblogs.com/longbigbeard/p/10028746.html
 

<think>我们正在处理一个系统错误:当用户运行 `lsb_release -a` 命令时,出现错误提示“解释器 /usr/bin/python3 未找到”。这表明系统试图使用位于 `/usr/bin/python3` 的 Python 3 解释器来运行 `lsb_release` 脚本,但该路径下没有 Python 3 可执行文件。 ### 问题分析 1. **`lsb_release` 命令的作用**:该命令用于显示 Linux 标准基础(LSB发行版的具体信息。在基于 Debian 的系统(如 Ubuntu)中,`lsb_release` 通常是一个 Python 脚本,依赖于 Python 3。 2. **错误原因**:错误信息明确指出脚本的解释器(即第一行指定的 shebang)是 `/usr/bin/python3`,但该路径下没有找到 Python 3 可执行文件。可能的原因包括: - Python 3安装- Python 3 安装在非标准路径(例如 `/usr/bin/python3.x` 或 `/usr/local/bin/python3`)。 - 符号链接 `/usr/bin/python3` 被误删或指向了不存在的文件。 ### 解决方案 #### 方法1:安装 Python 3(如果未安装) 如果系统尚未安装 Python 3,可以通过包管理器安装-Ubuntu/Debian 上: ```bash sudo apt update sudo apt install python3 ``` - 在 CentOS/RHEL 上: ```bash sudo yum install python3 ``` #### 方法2:修复符号链接 如果 Python 3安装但 `/usr/bin/python3` 链接缺失,可以手动创建符号链接。首先,确定 Python 3 的实际路径: ```bash which python3 ``` 或 ```bash ls /usr/bin/python3* ``` 假设实际路径是 `/usr/bin/python3.6`,则可以创建符号链接: ```bash sudo ln -s /usr/bin/python3.6 /usr/bin/python3 ``` #### 方法3:修改 `lsb_release` 脚本的解释器路径 如果不想修改系统符号链接,可以直接修改 `lsb_release` 脚本的第一行(shebang),指向正确的 Python 3 路径。 1. 找到 `lsb_release` 脚本的位置: ```bash which lsb_release ``` 通常路径为 `/usr/bin/lsb_release`。 2. 使用文本编辑器(如 `nano`)打开该文件: ```bash sudo nano /usr/bin/lsb_release ``` 3. 将第一行 `#!/usr/bin/python3` 修改为正确的 Python 3 路径,例如: ```#!/usr/bin/python3.6``` 4. 保存并退出。 ### 验证 执行命令验证修复: ```bash lsb_release -a ``` 应正常输出发行版信息。 ### 注意事项 - 在某些系统中,`lsb_release` 可能是一个二进制文件而非脚本,此时不会出现此类问题。但根据错误信息,当前系统上的 `lsb_release` 是 Python 脚本。 - 如果系统同时安装了多个 Python 3 版本,建议使用系统默认的 Python 3 符号链接(即修复 `/usr/bin/python3`)以确保其他依赖 Python 3 的脚本也能正常运行。 §§相关问题§§ 1. 如何检查系统中是否安装Python 3? 2. Linux 中 shebang 的作用是什么? 3. 如何修复其他因缺失解释器而报错的脚本?</think>### 问题分析 当运行 `lsb_release -a` 命令时出现错误 `/usr/bin/python3 not found`,这通常表示系统缺少 Python 3 解释器或符号链接配置异常。`lsb_release` 命令依赖于 Python 3 环境执行,常见原因包括: 1. Python 3安装 2. Python 3 路径配置错误 3. 符号链接 `/usr/bin/python3` 损坏或丢失 4. 系统升级导致环境不一致 --- ### 解决方案 #### 方法1:安装 Python 3(推荐) ```bash # Ubuntu/Debian sudo apt update sudo apt install python3 -y # CentOS/RHEL sudo yum install python3 -y ``` #### 方法2:修复符号链接(若已安装) ```bash # 查找 Python 3 实际路径 which python3 || whereis python3 # 创建符号链接 (示例路径) sudo ln -s /usr/bin/python3.8 /usr/bin/python3 # 替换为实际路径 ``` #### 方法3:强制重装 LSB 包 ```bash # Ubuntu/Debian sudo apt --reinstall install lsb-release -y # CentOS/RHEL sudo yum reinstall redhat-lsb-core -y ``` #### 方法4:手动指定解释器路径 ```bash # 临时修复(每次需指定路径) /usr/bin/env python3 $(which lsb_release) -a # 或使用具体路径如 /usr/bin/python3.8 ``` --- ### 验证修复 ```bash # 检查 Python 3 可用性 python3 --version # 重新运行命令 lsb_release -a ``` 正常应返回类似: ``` No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.3 LTS Release: 20.04 Codename: focal ``` --- ### 预防措施 1. **避免删除系统 Python** 系统工具如 `apt`/`yum` 依赖 Python,删除可能导致系统崩溃 2. **使用虚拟环境** 开发时用 `virtualenv` 隔离环境: ```bash python3 -m venv myenv && source myenv/bin/activate ``` 3. **更新符号链接** 系统升级后运行: ```bash sudo update-alternatives --config python3 ``` > 注:某些旧系统(如 CentOS 6)需特别注意 Python 2/3 兼容性问题[^1]
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值