소스에서 Python 3.6.3을 설치 한 후 'lsb_release'라는 모듈이 없습니다.


10

플랫폼 : 우분투 17.04 서버

우분투 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이어야하고 3.6을 무언가에 사용하려면 python3.6을 명시 적으로 사용해야한다고 생각합니다.
dobey.

소스에서 Python 3.6을 설치하는 이유는 무엇입니까?
edwinksl

우분투 시스템에서 기본값으로 다른 Python 설치를 설정 한 것 같습니다. 다른 모듈 설치 경로로 인해 많은 문제가 발생하는 것으로 알려져 있습니다. 의 출력 무엇 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이 모듈이 없다는 것입니다.

그래서, 당신은 오버라이드해야합니다 python3에서 python3.5python3.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.