【问题标题】:pip is showing error 'lsb_release -a' returned non-zero exit status 1pip 显示错误“lsb_release -a”返回非零退出状态 1
【发布时间】:2017-12-11 12:58:58
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: python ubuntu pip


    【解决方案1】:

    根本问题在于 pip 的vendor/distro.py:它使用subprocess.check_output() 调用lsb_release -asubprocess.check_output() 抛出 subprocess.CalledProcessError 错误,但周围的调用只捕获 OSError,所以 CalledProcessError 继续导致失败。我在调用uname -rs 时看到了类似的失败。这个错误has recently been fixed upstream in distro

    修补 pip 的 vendored 依赖非常简单:

    --- /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)
    
    
    

    【讨论】:

      【解决方案2】:

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

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

      原来的差不多……只需要加上“.5”。

      【讨论】:

      • 谢谢,WFM(对我有用),但有人能解释一下为什么这里是 3.5 而不是 2.7,也不是 3.7?我认为我什至没有安装 python 3.5。 $ python3 -V # 给出:Python 3.7.3
      【解决方案3】:

      这个问题的解决方法是更新 /usr/bin/lsb_release 上的 shebang

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

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

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

      让它发挥作用。

      【讨论】:

      • 我把python3.8放在shebang上,得到ModuleNotFoundError: No module named 'lsb_release'lsb_release/usr/bin/python3.8工作。
      【解决方案4】:

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

      $ 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'
      

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

      【讨论】:

      • 为什么使用/usr/local/lib/.. 而不是/usr/lib/.. 将debian 包作为链接名称see
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        现在你可以再次使用 pip 了,一切都会好起来的。

        2019 年 5 月更新:较新版本的 Linux 默认随附 Python3。正如此处的 cmets 所述,您可能只需要使用特定版本的 Python 3。

        【讨论】:

        • 进行更改后是否需要重新启动系统?
        • @Codieroot 不,只需保存文件就可以了。
        • @Codieroot 您的 lsb_release 文件的第一行现在是 #! /usr/bin/python2.7,对吗?
        • 为我解决了。如果不确定您的 python 安装是什么,请检查 /usr/bin/usr/local/bin 以查找您已安装的内容。在我的系统上,在 usr/bin 中是 2.7,在 usr/local/bin 中是 3.6。 Python 指的是后者。
        • 刚刚将python3.6升级到python3.7就出现了这个问题。我将第一行从#! /usr/bin/python3 编辑为#! /usr/bin/python3.7,一切都很好。不知道为什么
        【解决方案7】:

        在 Debian-9 上的installing python from source 之后(我确实安装了those packages)我遇到了同样的问题。我就是这样解决的:

        /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
        

        【讨论】:

          【解决方案8】:

          我不得不卸载 python3-dev 和 python2.7-dev,因为 miniconda 安装的 python3.4 和我的 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
          

          【讨论】:

            【解决方案9】:

            我在 共享主机帐户 上遇到了同样的问题,这个问题非常有限(我只为我的用户安装了 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

            【讨论】:

            • 在 hostgator 上工作!
            • /usr/lib/python3/dist-packages/pip/_vendordistro.py 上没有python3.8
            【解决方案10】:

            我能够使用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',则此修复适用。

            【讨论】:

              【解决方案11】:

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

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

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

              【讨论】:

                猜你喜欢
                • 2017-05-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-01-13
                • 2019-10-02
                • 1970-01-01
                • 2017-05-16
                • 2014-07-30
                相关资源
                最近更新 更多