2015-10-04 70 views
4

我有一个Python包,只能在Linux上有意义地运行。我在docs中看到,setup.py元数据中有一个platforms密钥,但据我所知,在distutils源代码中可以看到,该元数据实际上并不是用于的任何内容。如何制作特定于平台的Python包?

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

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

有没有更好的方法?

回答

2

我可能过于简单化,但在顶部您setup.py不能你只是这样做:

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

呀,这肯定是工作的,主要是我已经用它的方式,但它只是有点笨重。 : - / – ipmcc

相关问题