ubuntu 安装python3.7 以及安装pip3 出现Command '('lsb_release', '-a')' returned non-zero exit status 1问题解决

本文详细介绍了在Ubuntu环境下从零开始安装Python3.7的全过程,包括依赖包安装、源码编译、软链接配置及pip问题解决,适合初学者及需要重新配置Python环境的开发者。

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

最近因为电脑重装,东西全没了,总计一下最近重装环境的过程。
如果没有安装包,请下载:

wget http://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz

此链接为python3.7 ,其他版本自行选择。

先安装一些依赖的包:

sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev

接下来依次解压,编译,安装:

tar -zxvf Python-3.7.0.tgz
cd Python-3.7.0/
sudo ./configure --with-ssl --prefix=/usr/local/python3
sudo make
sudo make install

–prefix=/usr/local/python3 说明:此路径相当于指定安装的路径,如果省略会安装到系统的默认路径。

因为我指定了安装的路径,所以,在这里建立软链:

sudo ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip37

如果不成功,可能使python3已经存在了,sudo rm python3 或者 换一个名字,比如python37

这个时候运行pip3 时出现了问题:
subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1.

我搜到的都是说删除一个东西,原因是什么也不是太懂,反正用:

sudo rm /usr/bin/lsb_release

可以解决问题。

如pip无效

使用如下命令

sudo python -m pip install --upgrade --force-reinstall pip

3、看是否安装成功

①看你 python/bin 里有没有 pip 和 pip3 的py脚本 :
在这里插入图片描述
看 pip 的版本信息 ,可以看到最后的括号里是绑定到的版本。如果想使用方便一些,可以创建软连接

② 先用 " pip3 模块名 " 安装一个模块,然后用 " pip3 show 模块名 "来查看模块信息和安装位置。通过安装位置可以看出 pip 是否绑定到了你想要绑定的python版本。
在这里插入图片描述

创建软连接
若python3.7安装时,执行的是./configure,则:

mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python3 /usr/bin/python
mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/bin/pip3 /usr/bin/pip

若python3.7安装时,执行的是./configure --prefix=/usr/local/python3,则为:

mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python
mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_internal/commands/install.py", line 286, in run with self._build_session(options) as session: File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 108, in _build_session index_urls=self._get_index_urls(options), File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_internal/download.py", line 559, in __init__ self.headers["User-Agent"] = user_agent() File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_internal/download.py", line 144, in user_agent zip(["name", "version", "id"], distro.linux_distribution()), File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 122, in linux_distribution return _distro.linux_distribution(full_distribution_name) File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 677, in linux_distribution self.version(), File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 737, in version self.lsb_release_attr('release'), File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 899, in lsb_release_attr return self._lsb_release_info.get(attribute, '') File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 552, in __get__ ret = obj.__dict__[self._fname] = self._f(obj) File "/tmp/tmpy208fj7v/pip-19.2.3-py2.py3-none-any.whl/pip/_vendor/distro.py", line 1012, in _lsb_release_info stdout = subprocess.check_output(cmd, stderr=devnull) File "/home/lxx/Python-3.7.5/Lib/subprocess.py", line 411, in check_output **kwargs).stdout File "/home/lxx/Python-3.7.5/Lib/subprocess.py", line 512, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1. Makefile:1141: recipe for target 'install' failed
最新发布
06-26
<think>嗯,用户在执行`python3.8 -m pip install catkin_pkg`时遇到了错误`subprocess.CalledProcessError: Command &#39;(&#39;lsb_release&#39;, &#39;-a&#39;)&#39; returned non-zero exit status 1.`。这个问题看起来和之前的`catkin_pkg`安装问题有关,但这次的错误信息不同,需要仔细分析。 首先,用户使用Python 3.8的pip安装catkin_pkg,但安装过程中出现了调用`lsb_release -a`命令的错误。这说明pip安装过程中可能试图获取系统信息,但`lsb_release`命令执行失败。接下来需要考虑几个可能性: 1. **lsb_release命令缺失**:在某些Linux发行版中,特别是非Debian系的系统,可能没有预装`lsb-release`包。例如,用户可能在Arch Linux或Fedora上操作,而默认没有安装这个包。或者,用户可能使用的是Docker容器,其中某些基础镜像为了精简体积移除了该包。 2. **路径问题或权限问题**:虽然可能性较低,但需要检查`lsb_release`是否存在于PATH中,或者用户是否有执行权限。不过,常见的发行版通常会正确配置这些。 3. **Python脚本调用的问题**:可能pip安装过程中调用了某个脚本,该脚本依赖于`lsb_release`来获取系统信息,但未能处理命令不存在的情况。 接下来需要验证这些可能性。用户的操作系统是什么?如果是Ubuntu或Debian,通常默认安装了`lsb-release`,但如果是其他系统如CentOS,可能需要不同的包名。例如,CentOS使用`redhat-lsb-core`。然而,用户的问题提示`lsb_release`命令不存在,所以首先应建议安装相应的包。 另外,可能需要处理pip安装时绕过系统检查的可能性。例如,设置环境变量让pip忽略系统版本检测,但这可能带来其他问题,需谨慎。 总结解决步骤: 1. 安装`lsb-release`包。 2. 如果无法安装,尝试手动设置系统信息的环境变量,如`export DISTRIB_ID=Ubuntu`等,模拟`lsb_release`的输出。 3.pip安装时添加`--no-cache-dir`选项,避免使用缓存,强制重新获取依赖。 4. 检查系统是否为非Debian系,可能需要其他方法处理。 另外,用户之前的问题是关于ROS的,可能他们正在配置ROS环境,而ROS对系统版本有一定依赖,所以正确安装`lsb-release`可能对后续步骤也很重要。</think>遇到 `subprocess.CalledProcessError: Command &#39;(&#39;lsb_release&#39;, &#39;-a&#39;)&#39; returned non-zero exit status 1` 错误时,表明你的系统缺少 `lsb_release` 工具或相关依赖。以下是完整解决方案: --- ### 1. **直接修复 `lsb_release` 问题** #### 方法一:安装 `lsb-release` 包(推荐) - **Ubuntu/Debian 系统**: ```bash sudo apt-get update sudo apt-get install lsb-release ``` - **CentOS/RHEL 系统**: ```bash sudo yum install redhat-lsb-core ``` - **Arch Linux**: ```bash sudo pacman -S lsb-release ``` #### 方法二:手动跳过系统检测(临时方案) 如果无法安装 `lsb-release`,可尝试通过环境变量欺骗检测: ```bash # 模拟 Ubuntu 22.04 的系统信息(按需替换版本) export DISTRIB_ID=Ubuntu export DISTRIB_RELEASE=22.04 export DISTRIB_CODENAME=jammy export DISTRIB_DESCRIPTION="Ubuntu 22.04 LTS" # 重新运行安装命令 python3.8 -m pip install catkin_pkg ``` --- ### 2. **验证 `lsb_release` 是否生效** 执行以下命令检查是否修复: ```bash lsb_release -a ``` 如果输出类似: ```text No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jammy ``` 则说明已修复。 --- ### 3. **强制清理缓存并重试** 如果依然报错,可能是缓存数据干扰: ```bash python3.8 -m pip install --no-cache-dir catkin_pkg ``` --- ### 4. **特殊情况处理** #### 场景一:Docker 容器或精简系统 某些镜像(如 `alpine`)默认不包含 `lsb_release`: - **Alpine Linux** 需安装 `lsb-release` 兼容包: ```bash apk add lsb-release ``` - **直接修改系统标识文件**(仅限测试环境): ```bash echo "DISTRIB_ID=Ubuntu" > /etc/lsb-release echo "DISTRIB_RELEASE=22.04" >> /etc/lsb-release ``` #### 场景二:Python 虚拟环境干扰 确保虚拟环境中也安装了系统工具: ```bash # 退出虚拟环境 deactivate # 安装系统依赖后重新进入 your_venv_path/bin/activate ``` --- ### 5. **根本原因分析** | 现象 | 原因 | 解决方案 | |------|------|----------| | `lsb_release` 命令缺失 | 未安装 `lsb-release` 包 | 通过包管理器安装 | | 系统标识文件损坏 | `/etc/lsb-release` 文件丢失 | 手动创建文件或重装包 | | 容器环境限制 | 基础镜像未预装工具 | 修改 Dockerfile 添加安装步骤 | --- ### 6. **验证最终结果** 重新运行安装命令: ```bash python3.8 -m pip install catkin_pkg ``` 若成功,输出应包含: ```text Successfully installed catkin-pkg-X.X.X ``` --- ### 附:快速总结 ```bash # 1. 修复系统工具 sudo apt-get install lsb-release && sudo apt-get install -f # 2. 清理环境 unset DISTRIB_ID DISTRIB_RELEASE # 如果之前手动设置过变量 # 3. 重新安装 python3.8 -m pip install --no-cache-dir catkin_pkg ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值