【问题标题】:How can I make a Python package that is platform-specific?如何制作特定于平台的 Python 包?
【发布时间】:2015-10-04 14:47:44
【问题描述】:

我有一个 Python 包,它只能在 Linux 上有意义地运行。我在docs 中看到setup.py 元数据中有一个platforms 键,但据我在distutils 源中四处寻找,这个元数据实际上并不是用于任何东西。

接下来,我查看了 PyObjC,一个著名的仅适用于 OS X 的 Python 包。我观察到它在其setup.py 中填充了上述platforms 键。但是,当我尝试在 Linux 上安装 PyObjC 时,不会以任何有意的方式阻止或阻止安装。随之而来的故障模式非常不优雅:当platform.mac_ver() 返回一个它不期望的值时,它会出错。我尝试手动解决该问题,distutils 似乎正在以它的快乐方式收集依赖项等,直到最终它未能找到特定于平台的文件...底线,distutils 不处理特定于平台的包以任何合理的方式。

理想情况下,我希望安装失败并显示一些消息,表明该软件包与当前平台不兼容。我已经摸索了一下,我能想到的“最好”的事情是对installdevelop 命令进行子类化并在那里手动处理平台检查。

有没有更好的办法?

【问题讨论】:

    标签: python setuptools distutils


    【解决方案1】:

    我可能过于简单化了,但是在您的 setup.py 顶部,您不能只执行以下操作:

    import platform
    distname,version,id = platform.linux_distribution()
    if not distname:
       raise Exception('Aborting installation: Requires Linux')
    

    【讨论】:

    • 是的,这确实有效,而且主要是我采用的方式,但它有点笨拙。 :-/
    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 2017-12-22
    • 2015-03-07
    • 2019-11-26
    • 2013-07-07
    • 2012-04-13
    相关资源
    最近更新 更多