使用 Python3.8 安装新软件包时如何修复“模块‘平台’没有属性‘linux_distribution’”?

Emr*_*koc 37 python pip ubuntu-16.04 python-3.8

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

python3.8 -m pip install pylint
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误:

AttributeError: module 'platform' has no attribute 'linux_distribution'
Run Code Online (Sandbox Code Playgroud)

到目前为止,我尝试过:

sudo update-alternatives --config python3
Run Code Online (Sandbox Code Playgroud)

并选择 python3.8 并从 python3 开始运行命令,但没有运气。

然后:

sudo ln -sf /usr/bin/python3.5 /usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

我也尝试通过从 python3 开始运行命令,但它也不起作用。

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

Dav*_*ter 56

看起来至少在我的 Ubuntu 16.04 上,pip 为/usr/lib/python3/dist-packages/pip.

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

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

您可能想再次安装 python 3.5 版本的 pip sudo python3.5 -m easy_install pip

  • 如果您的系统上尚未安装“easy_install”,则需要运行“sudo apt-get python3-setuptools”(适用于 Ubuntu) (2认同)
  • 这是非常糟糕的建议。切勿使用 sudo pip/easy install :你会弄乱操作系统软件包。 (2认同)

Gur*_*lem 27

Python 3.8 删除了一些东西。我通过安装 pip 解决了我的 pip(特别是 pip install)问题curl

对我有用的是:
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/

  • 您可以将其写成一行: `curl https://bootstrap.pypa.io/get-pip.py | python3.8` (3认同)
  • 接受的答案对我不起作用,但这个答案对我有用。Ubuntu 16.04 WSL。 (2认同)

小智 6

问题是 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
Run Code Online (Sandbox Code Playgroud)

然后可以测试using_distro的值来判断是从 package 还是 distro 中获取 linux 发行版类型,例如:

if using_distro:
    linux_distro = distro.like()
else:
    linux_distro = platform.linux_distribution()[0]
Run Code Online (Sandbox Code Playgroud)