Kein Modul mit dem Namen 'lsb_release' nach der Installation von Python 3.6.3 aus dem Quellcode

10

Plattform: Ubuntu 17.04 Server

Die Ubuntu 17.04-Serverinstallation umfasst Python 2.7 und Python 3.5. Ich habe Python 3.6.3 manuell von der Quelle installiert. Allerdings lsb_release -aschlug fehl:

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

Aber wenn ich die erste Zeile der Datei lsb_releasevon ändere

#!/usr/bin/python3 -Es

zu

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

es funktioniert wieder

# lsb_release -a
LSB Version:    core-9.20160110ubuntu5-amd64:core-9.20160110ubuntu5-noarch:security-9.20160110ubuntu5-amd64:security-9.20160110ubuntu5-noarch
Distributor ID: Ubuntu
Description:    Ubuntu 17.04
Release:    17.04
Codename:   zesty

Hier sind die Modul-Suchpfade:

# python3.5
Python 3.5.3 (default, Sep 14 2017, 22:58:41) 
[GCC 6.3.0 20170406] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
>>> import lsb_release
>>> exit()

# python3
Python 3.6.3 (default, Oct 14 2017, 20:35:42) 
[GCC 6.3.0 20170406] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/root/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/site-packages']
>>> import lsb_release
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'lsb_release'
>>> exit()

Weiß jemand, wie man es behebt?

Richard Xu
quelle
1
Ich denke, Sie sollten wahrscheinlich nur rm / usr / local / bin / python3 verwenden und python3.6 explizit verwenden, wenn Sie 3.6 für etwas verwenden möchten.
Dobey
Warum installieren Sie Python 3.6 von der Quelle?
Edwinksl
Es sieht so aus, als hätten Sie eine andere Python-Installation als Standard in Ihrem Ubuntu-System eingerichtet. Es ist bekannt, dass dies aufgrund unterschiedlicher Installationspfade für Module zu großen Problemen führt. Was ist die Ausgabe von readlink -f /usr/bin/python3und /usr/bin/python3 --version?
David Foerster
Verwandte: stackoverflow.com/questions/46752279/…
Ciro Santilli 22 病毒 审查 六四 六四 22

Antworten:

22

Lösung:

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

Erklären:

Wir können in sehen /usr/bin/lsb_release

#!/usr/bin/python3 -Es

# lsb_release command for Debian
# (C) 2005-10 Chris Lawrence <[email protected]>
#    This package is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; version 2 dated June, 1991.
#    This package is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#    You should have received a copy of the GNU General Public License
#    along with this package; if not, write to the Free Software
#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
#    02110-1301 USA
from optparse import OptionParser
import sys
import os
import re

import lsb_release

Der Schlüsselschritt ist import lsb_release, aber das Problem ist Python 3.6, dass dieses Modul nicht vorhanden ist.

So müssen Sie overrided haben python3von python3.5zu python3.6. Deshalb ist dein lsb_releasekaputt.

Um dies zu überprüfen, sehen wir in python3.6:

  ~ python3.6 
Python 3.6.4 (default, Feb  6 2018, 16:57:12) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lsb_release
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'lsb_release'

dann in python3.5:

  ~ python3.5
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lsb_release
>>> lsb_release.__file__
'/usr/lib/python3/dist-packages/lsb_release.py'

Wo ist diese Datei:

  ~ ll /usr/lib/python3/dist-packages/lsb_release.py
lrwxrwxrwx 1 root root 38 Jul   7  2016 /usr/lib/python3/dist-packages/lsb_release.py -> ../../../share/pyshared/lsb_release.py

Dieses Modul lsb_releaseexistiert also in, python3.5aber nicht in python3.6. Und wir finden es schließlich!

Jetzt können wir das Problem beheben, indem wir einen Link zur Originaldatei hinzufügen lsb_release.py!

Für mich geht das!

JsonBruce
quelle