使用 Python3.8 安装新软件包时如何修复 "module 'platform' has no attribute 'linux_distribution'"?

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

我有 Python 版本的 2.7 和 3.5。我想安装更新版本的 Python,即 python 3.8。我正在使用 Ubuntu 16.04,由于依赖关系,我不能只卸载 Python 3.5。所以为了 运行 我的脚本,我使用 python3.8 app.py。到目前为止没问题。但是当我想通过 pip 安装新包时:

python3.8 -m pip install pylint

它抛出一个错误:

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

到目前为止,我尝试了:

sudo update-alternatives --config python3

并选择了 python3.8 和 运行 命令,从 python3 开始,但没有成功。

然后:

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

我也试过 运行 以 python3 开头的命令,但它也没有用。

如何修复它以便我可以将新软件包安装到我的新版本 Python?

检查您的轮子安装是否旧。我遇到了同样的错误并用

修复了它

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

Pylint 似乎适用于 python3.8

Python 3.8 删除了一些东西。我通过使用 curl
安装 pip 解决了 pip(特别是 pip install)的问题
对我有用的是:
cd ~/Downloads
正在下载 get-pip.py
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
然后 运行 它与 python 3.8:
python3.8 get-pip.py

帮我解决了。

来源:https://pip.pypa.io/en/stable/installing/

看起来至少在我的 Ubuntu 16.04 上,pip 为 /usr/lib/python3/dist-packages/pip 中的所有 Python 版本共享。

这就是我为让它再次工作所做的工作:

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

您可能需要使用 sudo python3.5 -m easy_install pip 再次安装 python 3.5 版本的 pip。

问题是 package.linux_distribution 从 Python 3.5(?) 开始被弃用。并为 Python 3.8.

完全删除

改用发行包。但是,此软件包仅适用于 Linux。

我 运行 在 Linux Mint 20 上安装 OpenCobolIDE 并将 Python 升级到最新级别后遇到了这个问题。已将代码修复提交给 OpenCobolIDE 作者进行审核和测试。通过此修复,我能够让 IDE 启动并 运行。

本质上,修复程序使用发行包(如果可用),否则使用旧平台包。例如:

如果可用,此代码将导入发行版:

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

然后可以通过测试using_distro的值来判断是从package还是distro获取linuxdistro类型,例如:

if using_distro:
    linux_distro = distro.like()
else:
    linux_distro = platform.linux_distribution()[0]

就我而言,删除 python-pip-whl 包有帮助:

apt-get remove python-pip-whl

它也删除了 pipvirtualenv,所以我不得不重新安装它们:

curl https://bootstrap.pypa.io/get-pip.py | python3
pip install virtualenv

我最近遇到了这个错误,事实证明我在标准库之前的路径中的一个文件夹中有一个名为 platform 的包,因此解释器导入了它。检查您实际导入的路径。