Nessun modulo chiamato 'lsb_release' dopo l'installazione di Python 3.6.3 dal sorgente


10

piattaforma: server ubuntu 17.04

L'installazione del server ubuntu 17.04 include python 2.7 e python 3.5. Ho installato Python 3.6.3 manualmente dalla fonte. Tuttavia, lsb_release -anon è riuscito:

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

Ma se modifico la prima riga del file lsb_releaseda

#!/usr/bin/python3 -Es

per

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

funziona di nuovo.

# 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

Ecco il percorso di ricerca del modulo:

# 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()

Qualcuno sa come aggiustarlo?


1
Penso che probabilmente dovresti semplicemente rm / usr / local / bin / python3 e usare esplicitamente python3.6 se vuoi usare 3.6 per qualcosa.
Dobey,

Perché stai installando Python 3.6 dal sorgente?
edwinksl,

Sembra che tu abbia impostato una diversa installazione di Python come predefinita nel tuo sistema Ubuntu. Questo è noto per causare molti problemi a causa dei diversi percorsi di installazione del modulo. Qual è l'output di readlink -f /usr/bin/python3e /usr/bin/python3 --version?
David Foerster,

Risposte:


23

Soluzione:

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

Spiegare:

Possiamo vedere dentro /usr/bin/lsb_release

#!/usr/bin/python3 -Es

# lsb_release command for Debian
# (C) 2005-10 Chris Lawrence <lawrencc@debian.org>
#    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

Il passaggio chiave è import lsb_release, ma il problema è Python 3.6che questo modulo non è disponibile.

Quindi, devi aver ignorato python3da python3.5a python3.6. Ecco perché il tuo lsb_releaseè rotto.

Per verificarlo, possiamo vedere 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'

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

dove si trova questo file:

  ~ 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

Quindi, questo modulo lsb_releaseesiste python3.5ma non esiste python3.6. E alla fine lo troviamo!

Ora risolviamolo aggiungendo un collegamento al lsb_release.pyfile originale !

Per me funziona!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.