让distutils安装预构建的编译库?

时间:2009-06-16 16:27:04

标签: python open-source installer compiled

我管理一个用python编写的开源项目(Remix,源代码可用)。我们要求用户运行python setup.py install来安装该软件。最近我们添加了一个已编译的C ++包(SoundTouch的一个端口 - 转到源代码中的trunk / externals来查看它。)我们希望安装基本Remix库的setup.py文件也能安装pysoundtouch14库。 / p>

但是,我们不希望用户必须在其系统上使用gcc或msvc工具链。我们为常见平台(linux-i386,windows,mac 10.5和10.6)预编译了二进制文件,转到trunk / externals / pysoundtouch14 / build来查看它们。我希望没有安装gcc或msvc的用户可以运行pysoundtouch14的setup.py,它会检测到我们预建的二进制文件的存在,并将它们复制到正确的位置(/Library/Python/2.5/site-packages例如。)但这不会发生。例如,在一个新的10.5系统上,setup.py抱怨没有安装gcc,即使它需要安装的.so已经内置在build /文件夹中。

所以我有两个直接的问题:

  • 如何在不需要构建系统的情况下,根据平台自动将setup.py自动“安装”在正确位置的预安装.so和.pyd文件?
  • 一个setup.py(我们的主要setup.py文件)如何运行另一个包中的setup.py(pysoundtouch14的setup.py?)

2 个答案:

答案 0 :(得分:1)

不幸的是,我会说覆盖install命令是可行的方法。

使用自定义分发命令可以轻松完成此操作。例如,见[1] http://svn.zope.org/Zope/branches/2.9/setup.py?rev=69978&view=auto

答案 1 :(得分:1)

鉴于多平台要求,您的第一个问题是艰难的。如果它只是windows,您可以使用安装后脚本选项来运行脚本来处理库,或者只使用非NSIS之类的非python工具。除了Almad的建议,我不确定还能做些什么。

关于第二个问题,您可能需要查看Paver