Không có mô-đun nào có tên 'lsb_release' sau khi cài đặt Python 3.6.3 từ nguồn


10

nền tảng: máy chủ Ubuntu 17.04

Cài đặt máy chủ Ubuntu 17.04 bao gồm python 2.7 và python 3.5. Tôi đã cài đặt Python 3.6.3 thủ công từ nguồn. Tuy nhiên, lsb_release -ađã thất bại:

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

Nhưng nếu tôi sửa đổi dòng đầu tiên của tệp lsb_releasetừ

#!/usr/bin/python3 -Es

đến

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

nó hoạt động trở lại.

# 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

Dưới đây là đường dẫn tìm kiếm mô-đun:

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

Có ai biết làm thế nào để khắc phục nó?


1
Tôi nghĩ có lẽ bạn chỉ nên rm / usr / local / bin / python3 và sử dụng python3.6 một cách rõ ràng nếu bạn muốn sử dụng 3.6 cho một cái gì đó.
dobey

Tại sao bạn cài đặt Python 3.6 từ nguồn?
edwinksl

Có vẻ như bạn thiết lập một cài đặt Python khác làm mặc định trong hệ thống Ubuntu của bạn. Điều này được biết là dẫn đến rất nhiều rắc rối vì các đường dẫn cài đặt mô-đun khác nhau. Sản lượng của readlink -f /usr/bin/python3và là /usr/bin/python3 --versiongì?
David Foerster

Câu trả lời:


23

Giải pháp:

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

Giải thích:

Chúng ta có thể thấy trong /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

Bước quan trọng là import lsb_release, nhưng vấn đề là Python 3.6không có mô-đun này.

Vì vậy, bạn phải ghi đè python3từ python3.5đến python3.6. Đó là lý do tại sao của bạn lsb_releasebị hỏng.

Để xác minh nó, chúng ta có thể xem trong 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'

sau đó trong 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'

tập tin này ở đâu:

  ~ 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

Vì vậy, mô-đun này lsb_releasetồn tại trong python3.5nhưng không tồn tại trong python3.6. Và chúng tôi tìm thấy nó cuối cùng!

Bây giờ hãy sửa nó thông qua thêm một liên kết đến lsb_release.pytập tin gốc !

Nó làm việc cho tôi!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.