【问题标题】:Python 3.7 and above: how to determine Linux distribution?Python 3.7 及更高版本:如何确定 Linux 发行版?
【发布时间】:2023-03-27 03:18:01
【问题描述】:

由于Python Docs 明确指出platform.linux_distribution() 是:

自 3.5 版起已弃用,将在 3.7 版中删除。

通过 Python 检测 Linux 发行版的正确且面向未来的方法是什么?

【问题讨论】:

  • 我认为他们应该说“发行版负责实现此功能”,而不是弃用它。并不是说他们不按原样进行各种更改。
  • @IgnacioVazquez-Abrams:所以你更喜欢让install Python from source 高冷的人离开?
  • @MartijnPieters:如果它是作为命名空间包实现的,那么它可以位于文件系统中等待安装。
  • @IgnacioVazquez-Abrams:不确定我是否在关注你。我对 pip 安装额外的依赖项非常满意;无论我如何安装 Python,这都是一致且相同的体验。为什么要求 Linux 发行版必须为此生成插件?
  • @MartijnPieters:我很难想到任何真正大小的发行版还没有对 Python 的某种 类型的依赖。这只是它的延伸。

标签: python linux python-3.x python-3.7


【解决方案1】:

您可以使用distro project:

$ pip install distro
$ python
>>> import distro
>>> distro.linux_distribution(full_distribution_name=False)
('centos', '7.1.1503', 'Core')

这个项目来自issue #1322,导致该功能被弃用。来自project README

它是 Python 原始 platform.linux_distribution 函数的更新替代实现,但它还提供了更多功能,不一定像命令行界面那样受 Python 约束

该方法已从 platform 库中删除,因为检测您正在使用的发行版的正确方法更改得比 Python 发布时间表可能遵循的更快。从上面的错误报告中:

stdlib 不适合经常更改的内容。看看我们在过去几年中看到了多少半标准。尝试在缓慢移动的代码库中遵循这些作为 Python 标准库是没有意义的。最好将功能放入可以更频繁更新的 PyPI 模块中。

【讨论】:

  • 感谢您的回答和见解。没想到这个问题这么快就引起了这么多人的关注。如果 Python 文档与潜在问题 (#1322) 有某种联系,可能会更清楚。现在它只是说该函数已被弃用,没有任何进一步的解释。
【解决方案2】:

这将留给一个包。来自此更改的新增内容:

platform.dist()platform.linux_distribution() 函数现已弃用。 Linux 发行版使用太多不同的方式来描述自己,所以功能留给了一个包。 (由 Vajrasky Kok 和 Berker Peksag 在 bpo-1322 中贡献。)

您可以查看删除它的issue 1322 进行更详细的讨论,还有a package there already

Python 标准库不会是您能够执行此操作的地方,因为它会产生维护开销。

【讨论】:

    【解决方案3】:

    根据 Jim 的回答,此功能将从 Python 中删除。 distro 包似乎是推荐的替代方案:

    $ pip3 install --user distro
    
    $ python3
    Python 3.6.3 (default, Oct  9 2017, 12:07:10) 
    [GCC 7.2.1 20170915 (Red Hat 7.2.1-2)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import distro
    >>> distro.linux_distribution()
    ('Fedora', '27', 'Twenty Seven')
    

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 2014-07-05
      • 2021-11-17
      • 2015-03-04
      • 2020-07-18
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      相关资源
      最近更新 更多