pip 显示错误"lsb_release -a"返回非零退出状态 1



我正在尝试使用 pip 安装软件包,但它抛出错误。

我使用的命令,

sudo pip install selenium

它显示的错误,

Exception:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 272, in run
with self._build_session(options) as session:
File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 72, in _build_session
insecure_hosts=options.trusted_hosts,
File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 329, in __init__
self.headers["User-Agent"] = user_agent()
File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 93, in user_agent
from pip._vendor import distro
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 1050, in <module>
_distro = LinuxDistribution()
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 594, in __init__
if include_lsb else {}
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 933, in _get_lsb_release_info
raise subprocess.CalledProcessError(code, cmd, stdout)
CalledProcessError: Command 'lsb_release -a' returned non-zero exit status 1
Traceback (most recent call last):
File "/usr/local/bin/pip", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/pip/__init__.py", line 233, in main
return command.main(cmd_args)
File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 251, in main
timeout=min(5, options.timeout)) as session:
File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 72, in _build_session
insecure_hosts=options.trusted_hosts,
File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 329, in __init__
self.headers["User-Agent"] = user_agent()
File "/usr/local/lib/python2.7/dist-packages/pip/download.py", line 93, in user_agent
from pip._vendor import distro
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 1050, in <module>
_distro = LinuxDistribution()
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 594, in __init__
if include_lsb else {}
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/distro.py", line 933, in _get_lsb_release_info
raise subprocess.CalledProcessError(code, cmd, stdout)
subprocess.CalledProcessError: Command 'lsb_release -a' returned non-zero exit status 1

我到处搜索过,但这个问题没有解决方案。它最近开始表现得像这样。此外,软件更新程序停止工作。不确定是否与此有关。我正在使用 Ubuntu 14.04 LTS 和 python 2.X

啊,经典的lsb_release问题。我已经多次与这个问题作斗争。问题是你的默认 Python 实现正在尝试使用 Python 3,但lsb_release需要 Python 2。要解决此问题,请执行以下操作:

  • 打开/usr/bin/lsb_release(确保使用 sudo 或以 root 身份打开!
  • 编辑要#! /usr/bin/python2.7的第一行
  • 保存文件

现在您可以再次使用pip,一切都应该没问题。

2019年5月更新:默认情况下,较新版本的Linux随Python3一起提供。如此处的评论中所述,您可能只需要使用特定版本的 Python 3。

安装 python3.7.3 并将 python3 的符号链接更改为指向它后,我遇到了此错误。 通过将第一行更改为:

# !/usr/bin/python3.5 -Es

原版几乎就是这样...只能添加".5"。

简而言之,这样做解决了:

$ sudo ln -s /usr/share/pyshared/lsb_release.py /usr/local/lib/python3.8/site-packages/lsb_release.py

详:

尝试$ sudo pip3 install something时,我在此线程中提到了错误:

... a long traceback, and ... 
subprocess.CalledProcessError: Command '('lsb_release', '-a')' returned non-zero exit status 1.

从python 3.5更新到3.8后开始发生。我已经尝试了几种解决方案,但没有成功。执行$ lsb_release -a时出现了解决方案的线索,这给了我以下错误:

Traceback (most recent call last):
File "/usr/bin/lsb_release", line 25, in <module>
import lsb_release
ModuleNotFoundError: No module named 'lsb_release'

另一个错误消息将我带到了这个解决方案,它解释了从 3.6 版开始,python 不再有lsb_release.py文件。解决方案只是为这个丢失的文件创建一个链接。

我在共享主机帐户上遇到了同样的问题,这非常有限(我只为我的用户安装 python 和 pip(。他们的lsb_release -a返回一些非标准的东西,我无法更改它。 我通过编辑distro.py(在您的情况下:/usr/local/lib/python2.7/dist-packages/pip/_vendor/distro.py(并更改__init__方法的默认参数解决了这个问题。 在我的版本中,它位于第 545行。 片段:

def __init__(self,
include_lsb=True,
os_release_file='',
distro_release_file=''):

只需将include_lsb=True更改为include_lsb=False即可。

我看到了同样的错误,sudo rm /usr/bin/lsb_release为我解决了它。

我能够用unset _PYTHON_SYSCONFIGDATA_NAME修复此错误消息。这阻止了lsb_release尝试导入$_PYTHON_SYSCONFIGDATA_NAME。 在那之后,pip install又工作了。如果您运行lsb_release -a并获取ModuleNotFoundError: No module named '_sysconfigdata_x86_64_conda_cos6_linux_gnu',则此修复程序适用。

此问题的解决方案是更新/usr/bin/lsb_release 上的 shebang

这个lsb_release文件上的 shebang 告诉使用哪个版本的 python。这必须与您使用的当前版本的 python 匹配。

例如,我使用的是Python 3.5,所以我将shebang更改为:

#!/usr/bin/python3.5 -Es

并让它工作。

跑步sudo apt reinstall lsb-release为我解决了这个问题。感谢托尼在这篇文章中

在 Debian-9 上从源代码安装 python 后(但我确实安装了这些软件包(,我遇到了同样的问题。这就是我解决它的方式:

/usr/local/bin/python3.x -m venv <my_venv>
. <my_venv>/bin/activate
easy_install pip
easy_install setuptools
easy_install wheel
pip install -U setuptools wheel pip

我认为这是旧的编译python文件的问题,这些文件与Ubuntu升级冲突。

对我来说,解决方案是删除以下.pyc文件

sudo rm /usr/lib/python2.7/dist-packages/*.pyc

我不得不卸载python3-dev和python2.7-dev,因为miniconda安装的python3.4和我的python3.6从Raspberry pi上的源代码编译的python3.6(Raspbian Stretch with Arm71(之间的冲突,然后重新安装pip和pip3:

sudo apt-get -y remove python2.7-dev python3-dev
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py

潜在的问题在于 pip 的vendor/distro.py:它使用subprocess.check_output()来调用lsb_release -asubprocess.check_output()在出错时抛出subprocess.CalledProcessError,但周围的调用只捕获OSError,因此CalledProcessError继续导致失败。 我在调用uname -rs时看到了类似的失败. 此错误最近已在上游修复distro.

修补 pip 的供应商依赖项非常简单:

--- /usr/local/lib/python2.7/site-packages/pip/_vendor/distro.py    2021-05-07 15:06:41.191965026 +0000
+++ /usr/local/lib/python2.7/site-packages/pip/_vendor/distro.py    2021-05-07 15:06:53.092831652 +0000
@@ -1010,7 +1010,7 @@
try:
cmd = ('lsb_release', '-a')
stdout = subprocess.check_output(cmd, stderr=devnull)
-            except OSError:  # Command not found
+            except (OSError, subprocess.CalledProcessError):  # Command not found
return {}
content = stdout.decode(sys.getfilesystemencoding()).splitlines()
return self._parse_lsb_release_content(content)
@@ -1045,7 +1045,7 @@
try:
cmd = ('uname', '-rs')
stdout = subprocess.check_output(cmd, stderr=devnull)
-            except OSError:
+            except (OSError, subprocess.CalledProcessError):  # Command not found
return {}
content = stdout.decode(sys.getfilesystemencoding()).splitlines()
return self._parse_uname_content(content)

最新更新