如何创建特定于平台的Python包?

我有一个只能在Linux上有意义地运行的Python包.我在docs中看到setup.py元数据中有一个平台密钥,但据我所知,在distutils源代码中,这个元数据实际上并没有用于任何东西.

接下来,我去看了PyObjC,一个着名的OS X-only Python包.我观察到它在setup.py中填充了前面提到的平台键.但是,当我尝试在Linux上安装PyObjC时,不会以任何有意的方式阻止或阻止安装.接下来的失败模式非常糟糕:当platform.mac_ver()返回它不期望的值时,它会出错.我尝试手动修复这个问题,并且distutils似乎正在以其快乐的方式收集依赖关系等等,直到最终它找不到特定于平台的文件…底线,distutils没有以任何合理的方式处理特定于平台的包.

理想情况下,我希望安装失败,并显示一些消息,指出该软件包与当前平台不兼容.我已经涂了一点,我能够提出的“最好”的东西包括子类化安装和开发命令并在那里手动处理平台检查.

有没有更好的办法?

解决方法:

我可能过于简单了,但在你的setup.py的顶部,你不能只做以下事情:

import platform
distname,version,id = platform.linux_distribution()
if not distname:
   raise Exception('Aborting installation: Requires Linux')
上一篇:打包带有依赖项的单个Python模块


下一篇:python – 如何从pkg_resources中的Distribution对象获取作者姓名,项目描述等?