Нет модуля с именем «lsb_release» после установки Python 3.6.3 из источника

Платформа

: сервер 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()

Кто-нибудь знает, как его исправить?

2
задан 15 October 2017 в 19:26

2 ответа

Решение:

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

Ключ step import lsb_release, но проблема в Python 3.6 не имеет этого модуля.

Итак, вы должны переопределить 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!

Он работает для меня!

3
ответ дан 18 July 2018 в 05:17

Решение:

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

Ключ step import lsb_release, но проблема в Python 3.6 не имеет этого модуля.

Итак, вы должны переопределить 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!

Он работает для меня!

3
ответ дан 24 July 2018 в 18:17

Другие вопросы по тегам:

Похожие вопросы: