ไม่มีโมดูลชื่อ 'lsb_release' หลังจากติดตั้ง Python 3.6.3 จากแหล่งที่มา


10

แพลตฟอร์ม: เซิร์ฟเวอร์ Ubuntu 17.04

การติดตั้งเซิร์ฟเวอร์ ubuntu 17.04 ประกอบด้วย python 2.7 และ python 3.5 ฉันติดตั้ง Python 3.6.3 จากแหล่งด้วยตนเอง อย่างไรก็ตามlsb_release -aล้มเหลว:

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

แต่ถ้าฉันแก้ไขบรรทัดแรกของไฟล์lsb_releaseจาก

#!/usr/bin/python3 -Es

ถึง

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

มันทำงานได้อีกครั้ง

# 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

นี่คือเส้นทางการค้นหาโมดูล:

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

ไม่มีใครรู้วิธีการแก้ไขหรือไม่


1
ฉันคิดว่าคุณน่าจะเป็นแค่ rm / usr / local / bin / python3 และใช้ python3.6 อย่างชัดเจนหากคุณต้องการใช้ 3.6 สำหรับบางอย่าง
dobey

ทำไมคุณถึงติดตั้ง Python 3.6 จากแหล่งที่มา?
edwinksl

ดูเหมือนว่าคุณจะตั้งค่าการติดตั้ง Python อื่นเป็นค่าเริ่มต้นในระบบ Ubuntu ของคุณ สิ่งนี้เป็นที่ทราบกันดีว่านำไปสู่ปัญหามากมายเนื่องจากเส้นทางการติดตั้งโมดูลที่แตกต่างกัน ผลลัพธ์คืออะไรreadlink -f /usr/bin/python3และ/usr/bin/python3 --version?
David Foerster

คำตอบ:


23

สารละลาย:

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

อธิบาย:

เราสามารถเห็นสิ่งต่อไปนี้ /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

ขั้นตอนสำคัญคือimport lsb_releaseแต่ปัญหาPython 3.6ไม่มีโมดูลนี้

ดังนั้นคุณจะต้องมี overrided python3จากไปpython3.5 python3.6นั่นเป็นเหตุผลที่คุณlsb_releaseเสีย

เพื่อตรวจสอบมันเราสามารถดูใน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'

จากนั้นใน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'

ไฟล์นี้อยู่ที่ไหน:

  ~ 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

ดังนั้นนี้โมดูลlsb_releaseที่มีอยู่ในแต่ไม่อยู่ในpython3.5 python3.6และเราพบมันในที่สุด!

ตอนนี้เรามาแก้ไขโดยเพิ่มลิงค์ไปยังlsb_release.pyไฟล์ต้นฉบับ!

มันใช้งานได้สำหรับฉัน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.