Tidak ada modul bernama 'lsb_release' setelah menginstal Python 3.6.3 dari sumber

10

platform: server ubuntu 17.04

Instalasi server ubuntu 17.04 termasuk python 2.7 dan python 3.5. Saya menginstal Python 3.6.3 secara manual dari sumber. Namun, lsb_release -agagal:

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

Tetapi jika saya memodifikasi baris pertama file lsb_releasedari

#!/usr/bin/python3 -Es

untuk

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

itu bekerja lagi.

# 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

Berikut ini adalah jalur pencarian modul:

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

Adakah yang tahu cara memperbaikinya?

Richard Xu
sumber
1
Saya pikir Anda mungkin harus hanya rm / usr / local / bin / python3, dan gunakan python3.6 secara eksplisit jika Anda ingin menggunakan 3.6 untuk sesuatu.
dobey
Mengapa Anda menginstal Python 3.6 dari sumber?
edwinksl
Sepertinya Anda mengatur instalasi Python yang berbeda sebagai default di sistem Ubuntu Anda. Ini diketahui menyebabkan banyak masalah karena jalur pemasangan modul yang berbeda. Apa hasil dari readlink -f /usr/bin/python3dan /usr/bin/python3 --version?
David Foerster
terkait: stackoverflow.com/questions/46752279/…
Ciro Santilli 冠状 病毒 审查 六四 六四 事件

Jawaban:

23

Larutan:

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

Menjelaskan:

Kita bisa melihat /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

Langkah kuncinya adalah import lsb_release, tetapi masalahnya adalah Python 3.6tidak memiliki modul ini.

Jadi, Anda harus mengganti python3dari python3.5ke python3.6. Itu sebabnya kamu lsb_releaserusak.

Untuk memverifikasinya, kita dapat melihat di 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'

lalu di 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'

di mana file ini:

  ~ 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

Jadi, modul ini lsb_releaseada python3.5tetapi tidak ada di python3.6. Dan akhirnya kami menemukannya!

Sekarang mari kita perbaiki dengan menambahkan tautan ke lsb_release.pyfile asli !

Ini bekerja untuk saya!

JsonBruce
sumber