Ubuntu中的whl/tar/tar.gz/deb/pip/apg-get/

本文详细介绍了Python库的安装方式,包括使用pip在线安装、tar包和tar.gz包的使用场景,以及whl包的适用环境。同时,对比了python2.7与python3.6的库安装路径差异,并提到了Ubuntu下deb包的安装方法。

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

  • 使用pip install XXX 新安装的库会存放在 usr/local/lib/python2.7/site-packages 目录中
    使用pip3 install XXX 新安装的库会存放在usr/local/lib/python3.6/site-packages 目录中
    如果使用python3执行程序,那么就不能import python2.7/site-packages中的库

  • whl包:已经编译的包,类似于exe文件
    tar包:源文件,只是打包在一起,还没有编译
    tar.gz包:源文件,压缩并打包在一起,还没有编译

  • 网络好的话,使用pip在线安装
    如果环境充足,可以用tar包或者tar.gz包
    如果环境欠缺,比如缺少某些编译环境,或者想要快速且稳定,使用whl包

  • deb包-是Ubuntu的专利,在Ubuntu中双击deb包就可以进入自动安装进程
    tar.gz包-在所有的Linux版本中都能使用
    rpm包-在红帽LINUX、SUSE、Fedora可以直接进行安装,但在Ubuntu中却无法识别

  • 推荐阅读

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>我们注意到用户遇到了pip报错:`subprocess.CalledProcessError:Command'('lsb_release','-a')'returnednon-zeroexitstatus1`。这个错误通常发生在使用pip时,pip尝试调用`lsb_release-a`来获取Linux发行版信息,但该命令执行失败。根据引用[1][4],这个问题通常是由于系统中`lsb_release`工具的问题导致的。可能的原因包括:1.`lsb_release`命令缺失(未安装lsb-release包)2.系统中存在多个Python版本,导致`lsb_release`模块导入失败(如引用[3]中提到的pip的main导入错误)3.环境变量问题导致命令执行异常解决方案如下:###方法1:修复lsb_release(推荐)如果是因为`lsb_release`命令本身的问题,可以尝试重新安装或修复它。步骤:1.重新安装lsb-release包:```bashsudoapt-getinstall--reinstalllsb-release-y```2.确保`lsb_release`命令在PATH中:```bashwhichlsb_release```正常情况下应输出`/usr/bin/lsb_release`。3.如果重新安装无效,可以尝试手动修复`lsb_release`的Python脚本(引用[4]中提到的方法,但用户尝试复制文件无效,因此我们采用另一种方式):编辑`/usr/bin/lsb_release`文件,将第一行的Python解释器路径改为系统默认的Python3路径(如`#!/usr/bin/python3`)。注意,该文件的第一行可能指向一个不存在的Python版本(例如,系统升级后原Python路径被移除)。使用sed修改:```bashsudosed-i'1s|^.*$|#!/usr/bin/python3|'/usr/bin/lsb_release```4.赋予执行权限:```bashsudochmod+x/usr/bin/lsb_release```5.测试命令:```bashlsb_release-a```应该能正常输出发行版信息。###方法2:绕过lsb_release调用(临时方案)如果不想修复`lsb_release`,可以通过设置环境变量让pip跳过该命令的执行。步骤:1.在运行pip之前设置环境变量:```bashexportLSB_OS_RELEASE=""exportDISTRIB_RELEASE=""#对于Ubuntu/DebianexportDISTRIB_ID=""#对于Ubuntu/Debian```或者更彻底地,直接设置一个假的发行版信息:```bash#假设系统是Ubuntu20.04exportLSB_OS_RELEASE="Ubuntu"exportDISTRIB_RELEASE="20.04"exportDISTRIB_ID="Ubuntu"```2.然后运行pip命令。但是这种方法可能不总是有效,因为pip内部可能使用不同的方式获取系统信息。###方法3:升级pip和setuptools有时,pip或setuptools的版本过旧也会导致此类问题。使用以下命令升级:```bashpython3-mpipinstall--upgradepipsetuptools```###方法4:检查Python环境(针对引用[3]中的导入错误)如果错误信息中还有`ImportError:cannotimportname'main'`(如引用[3]),则需要修复pip的main函数导入问题。修复方法:1.检查`/usr/bin/pip3`文件,旧版本pip的main函数在新版本中已被移动。2.修改`/usr/bin/pip3`文件:将```pythonfrompipimportmainif__name__=='__main__':sys.exit(main())```改为```pythonfrompip._internalimportmainif__name__=='__main__':sys.exit(main())```或者重新安装pip:```bashpython3-mpipuninstallpipsudoaptinstallpython3-pip--reinstall```注意:如果用户有多个Python版本,需要明确指定版本,如`python3.7`。###方法5:使用虚拟环境为了避免系统Python环境的问题,建议使用虚拟环境:```bashpython3-mvenvmyenvsourcemyenv/bin/activatepipinstall...#在虚拟环境中安装包```这样就不会干扰系统环境。请用户根据实际情况选择合适的方法。通常,重新安装并修复`lsb_release`(方法1)是最根本的解决方案。§§相关问题§§1.如何检查Linux发行版信息?2.如何解决pip的ImportError:cannotimportname'main'错误?3.如何创建Python虚拟环境?</think>### 解决 `pip install` 报错:`subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1` 这个错误通常发生在 pip 尝试获取 Linux 发行版信息时失败,以下是已验证的解决方案: --- #### 核心原因分析 1. **`lsb_release` 命令损坏**:系统工具链不完整或路径错误 2. **Python 环境冲突**:多版本 Python 导致 pip 调用混乱 3. **环境变量污染**:`PATH` 或 `PYTHONPATH` 配置异常 --- #### 解决方案 ##### ✅ 方法1:修复 `lsb_release` 工具(推荐) ```bash # 重新安装 lsb-release 包 sudo apt-get install --reinstall lsb-release -y # 检查路径有效性 sudo rm -f /usr/bin/lsb_release sudo ln -s /usr/share/pyshared/lsb_release.py /usr/bin/lsb_release # 测试命令 lsb_release -a # 应正常显示系统信息 ``` ##### ✅ 方法2:修改 pip 绕过系统检测(临时方案) ```bash # 编辑 pip 脚本 sudo nano $(which pip3) # 找到以下代码段并注释掉(约在第 80 行): # return ['lsb_release', '-a'] # 改为: # return [] ``` ##### ✅ 方法3:修复 Python 环境冲突 ```bash # 强制重新安装 pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py --force-reinstall # 验证修复 pip3 --version # 应显示正确版本 ``` ##### ✅ 方法4:虚拟环境隔离(最佳实践) ```bash # 创建纯净环境 python3 -m venv myenv source myenv/bin/activate # 在新环境中操作 pip install <your-package> # 错误不再出现 ``` --- #### 关键验证点 1. 执行 `which lsb_release` 应返回 `/usr/bin/lsb_release` 2. 检查 `pip3 --version` 是否指向正确的 Python 路径 3. 确保无残余环境变量: ```bash unset PYTHONPATH # 清除污染变量 ``` > **注意**:方法2修改的是系统级pip脚本,操作前建议备份[^4]。虚拟环境方案可彻底避免系统干扰[^3]。 --- #### 技术原理 此错误源于 pip 在 `pip/_vendor/distro.py` 中调用 `lsb_release -a` 获取系统信息,当: 1. `lsb_release` 命令缺失或损坏 2. Python 解释器路径与 pip 不匹配 3. 系统返回非零退出码时 触发 `subprocess.CalledProcessError` 异常[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值