Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

lsb_release not working after install Python 3.6.3 from source

platform: ubuntu 17.04 server

The ubuntu 17.04 server installation includes python 2.7 and python 3.5. I installed the Python 3.6.3 manually from source. However, the lsb_release -a failed:

root@birds:~# 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'

But if I modify the first line of the file lsb_release from
#!/usr/bin/python3 -Es to #!/usr/bin/python3.5 -Es it works again.

root@birds:~# 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

Here are the module search path:

python3.5

root@birds:~# 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

root@birds:~# 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()

does anyone know how to fix it? Thanks.

like image 361
Richard Xu Avatar asked Oct 15 '17 06:10

Richard Xu


People also ask

What does the command lsb_release?

Description. The lsb_release command prints certain LSB (Linux Standard Base) and Distribution information. If no options are given, the -v option is assumed.

How do I install Python 3.6 8 on Ubuntu?

Install Python 3.6 in Ubuntu 16.10 and 17.04 To use Python 3.6, invoke the following command. To exit the Python interpreter, type the following command and press Enter. That's all! In this short article, we have explained how to install Python 3.6 in Ubuntu 14.04, 16.04, 16.10 and 17.04 via the APT package manager.


2 Answers

Solution:

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

Explain:

We can see in /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

The key step is import lsb_release, but the problem is Python 3.6 doesn't have this module.

So, you must have overrided python3 from python3.5 to python3.6. That's why your lsb_release is broken.

To verify it, we can see in 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'

then in 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'

where is this file:

➜  ~ 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

So, this module lsb_release exist in python3.5 but not exist in python3.6. And We find it eventually!

Now let's fix it through add a link to the original lsb_release.py file!

It works for me!

like image 167
JsonBruce Avatar answered Oct 31 '22 17:10

JsonBruce


This happens when dist-packages is wiped out or not accessible to the python installation.

I got into this when I removed a dist-packages/ in /usr/lib/python3 - because there were some user-installed packages conflicting with my local packages.

To fix, you can try:

sudo apt reinstall lsb-release

This fixed it for me. It also avoids the issue with the sibling answer of purging lsb-release. No need.

like image 26
Tony N Avatar answered Oct 31 '22 16:10

Tony N