How to fix "module 'platform' has no attribute 'linux_distribution'" when installing new packages with Python3.8?
Asked Answered
M

7

48

I had Python versions of 2.7 and 3.5. I wanted the install a newer version of Python which is python 3.8. I am using Ubuntu 16.04 and I can not just uninstall Python 3.5 due to the dependencies. So in order to run my scripts, I use python3.8 app.py. No problem so far. But when I want to install new packages via pip:

python3.8 -m pip install pylint

It throws an error:

AttributeError: module 'platform' has no attribute 'linux_distribution'

So far, I tried:

sudo update-alternatives --config python3

and chose python3.8 and run command by starting with python3 but no luck.

Then:

sudo ln -sf /usr/bin/python3.5 /usr/bin/python3

I also tried running the command by starting with python3 but it did not work either.

How can I fix it so that I can install new packages to my new version of Python?

Meshach answered 7/11, 2019 at 23:42 Comment(4)
It seems pylint is not yet updated to support Python3.8.Pteryla
tried pillow, scipy, pandas, selenium non of them does. but installed python 3.7 and its all fine. Thank you.Meshach
platform.linux_distribution was removed in Python 3.8. See: bugs.python.org/issue28167, which seems to affect the package setup/install scripts. You might have to report the issue to the respective packages (or submit a PR to fix it for them).Pteryla
Related: github.com/PyCQA/pylint/issues/3291Devastate
S
58

It looks like at least on my Ubuntu 16.04, pip is shared for all Python versions in /usr/lib/python3/dist-packages/pip.

This is what I did to get it working again:

  • sudo apt remove python3-pip
  • sudo python3.8 -m easy_install pip

You might want to install the python 3.5 version of pip again with sudo python3.5 -m easy_install pip.

Shlomo answered 3/2, 2020 at 20:39 Comment(8)
Works great on ubuntu 16.04 + python3.8. Thanks!Judicature
If you don't already have "easy_install" on your system, you will want to run "sudo apt-get python3-setuptools" (for Ubuntu)Shafting
Thanks for your answer it help me to resolve my issue @Shafting HalterNordstrom
If the command "sudo apt-get python3-setuptools" does not work, you should put "install" before python3-setuptools, like this: "sudo apt-get install python3-setuptools"Barbie
This is very bad advice. Never sudo pip/easy install things: you mess up OS packages.Panayiotis
I agree that this is bad advice, but it's only bad advice, because the Python packaging is broken in some places. It makes no sense that there is a generic pip for all the different Python 3.x installations.Shlomo
Has some problem with this on docker for Ubuntu 16 via bitbucket pipeline but below answer helped me.Eerie
didn't help me. error the sameSidelong
M
39

Python 3.8 removed some stuff. I solved my problems with pip (specifically pip install) by installing pip with curl.

What worked for me was downloading get-pip.py and run it with Python 3.8:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3.8 get-pip.py

Source: https://pip.pypa.io/en/stable/installing/

Mozart answered 27/1, 2020 at 18:30 Comment(3)
The accepted answer did not work for me, but this one did. Ubuntu 16.04 WSL.Laid
You can make it in one line: curl https://bootstrap.pypa.io/get-pip.py | python3.8Monahan
In my case, just for tests, I ended up installing a very old version of pip (pip 7.1.2). The install worked fine but I could not uninstall pip via pip uninstall -y pip since it was throwing the error OP had. I had to resort to get-pip.py to fix it.Mars
F
15

The problem is that package.linux_distribution was deprecated starting with Python 3.5(?). and removed altogether for Python 3.8.

Use the distro package instead. This package only works on Linux however.

I ran into this problem after installing OpenCobolIDE on Linux Mint 20, having upgraded Python to the latest level. have submitted a code fix to the OpenCobolIDE author to review and test. I was able to get the IDE to start up and run with this fix.

Essentially the fix uses the distro package if available, otherwise it uses the old platform package. For example:

This code imports distro if available:

import platform
using_distro = False
try:
    import distro
    using_distro = True
except ImportError:
    pass

Then you can test the value of using_distro to determine whether to get the linux distro type from package or distro, for example:

if using_distro:
    linux_distro = distro.like()
else:
    linux_distro = platform.linux_distribution()[0]
Footwork answered 28/9, 2020 at 17:6 Comment(1)
For me, executing this code leads to linux_distro being an empty string... :/ (Arch Linux on Mac Book Pro 2015)Montage
H
2

Check if your wheels installation is old. I was getting this same error and fixed it with

python3.8 -m pip install --upgrade pip setuptools wheel

Pylint seems to work on python3.8

Holmann answered 9/12, 2019 at 21:7 Comment(1)
Not help in case of Ubuntu 16.04Eerie
T
2

In my case, removing python-pip-whl package helped:

apt-get remove python-pip-whl

It removed also pip and virtualenv, so I had to install them again:

curl https://bootstrap.pypa.io/get-pip.py | python3
pip install virtualenv
Thirzi answered 30/9, 2020 at 6:27 Comment(0)
S
1

I recently had this error and it turns out that I had a package called platform at a folder on my path ahead of the standard library and so the interpreter imported that instead. Check your path to what it is that you're actually importing.

Swung answered 9/6, 2021 at 10:19 Comment(1)
Was the same case for me. But how to circumvent this collision of namespaces in general?Amandaamandi
F
1

If you have this issue when running a docker-compose up command. The solutions above do not work. You should install docker ce (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04)

Full answered 23/1, 2023 at 13:25 Comment(1)
Great find - save my day!Congeries

© 2022 - 2024 — McMap. All rights reserved.