Aucun module nommé 'lsb_release' après l'installation de Python 3.6.3 depuis la source

10

plateforme: serveur ubuntu 17.04

L'installation du serveur ubuntu 17.04 inclut python 2.7 et python 3.5. J'ai installé Python 3.6.3 manuellement depuis la source. Cependant, a lsb_release -aéchoué:

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

Mais si je modifie la première ligne du fichier lsb_releasede

#!/usr/bin/python3 -Es

à

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

ça marche encore.

# 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

Voici le chemin de recherche du module:

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

Quelqu'un sait-il comment y remédier?

Richard Xu
la source
1
Je pense que vous devriez probablement juste rm / usr / local / bin / python3, et utiliser python3.6 explicitement si vous voulez utiliser 3.6 pour quelque chose.
dobey
Pourquoi installez-vous Python 3.6 à partir des sources?
edwinksl
Il semble que vous ayez configuré une installation Python différente par défaut dans votre système Ubuntu. Ceci est connu pour entraîner de nombreux problèmes en raison des différents chemins d'installation des modules. Quelle est la sortie de readlink -f /usr/bin/python3et /usr/bin/python3 --version?
David Foerster
en relation: stackoverflow.com/questions/46752279/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Réponses:

23

Solution:

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

Explique:

On peut voir dans /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

L'étape clé est import lsb_release, mais le problème n'est Python 3.6pas lié à ce module.

Donc, vous devez avoir overrided python3de python3.5à python3.6. Voilà pourquoi votre lsb_releaseest cassé.

Pour le vérifier, nous pouvons voir dans 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'

puis dans 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'

où est ce fichier:

  ~ 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

Donc, ce module lsb_releaseexiste dans python3.5mais n'existe pas dans python3.6. Et nous le trouvons finalement!

Maintenant, corrigeons-le en ajoutant un lien vers le lsb_release.pyfichier d' origine !

Ça marche pour moi!

JsonBruce
la source