如何让distutils安装预编译的库?

9
我管理一个开源项目(Remix, 源代码可在那里找到),使用Python编写。我们要求用户运行python setup.py install来安装软件。最近,我们添加了一个已编译的C++包(一个SoundTouch的端口——请前往源代码中的trunk/externals查看)。我们希望能够在安装基本的Remix库的setup.py文件中安装pysoundtouch14库。
然而,我们不希望用户必须在他们的系统上拥有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文件)如何运行另一个包(pysoundtouch14的setup.py)的setup.py?

2个回答

1

这个链接已经失效了,你能分享一下代码片段吗? - Saeid Bagheri
1
记忆有些生疏,毕竟已经过去13年了,但我相信我指的是这个zope设置命令。 (https://github.com/zopefoundation/Zope/blob/2.9/setup.py#L59) - Almad

1

考虑到多平台的要求,你的第一个问题很棘手。如果只是在Windows上,你可以使用后安装脚本选项来运行脚本来处理库,或者使用非Python工具,如NSIS。除了Almad的建议之外,我不确定还能做什么。

对于你的第二个问题,你可能需要研究一下Paver


感谢DoxaLogos。也许我们只需要转向特定平台的安装程序(NSIS,在Mac上的软件包,Debian的dkpg/apt等)。这可能不是一个可怕的想法。但我希望有一个纯Python的解决方案...也许不可能。 - bwhitman
即使您使用多个软件包工具,我认为您可以使用Paver等工具自动化其软件包创建。因此,一旦您最初设置好所有内容,就可以使用Paver运行构建脚本。 - Jay Atkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接