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

9 投票
2 回答
848 浏览
提问于 2025-04-15 12:17

我在管理一个开源项目(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文件如何能同时运行另一个包含包(pysoundtouch14的setup.py)的setup.py?

2 个回答

1

很遗憾,我得说,重写安装命令是个不错的选择。

这可以通过自定义分发命令轻松实现。比如,可以参考一下这个链接:[1] http://svn.zope.org/Zope/branches/2.9/setup.py?rev=69978&view=auto

1

你的第一个问题有点棘手,因为需要支持多个平台。如果只是针对Windows的话,你可以使用安装后脚本的选项,来运行一个脚本处理库文件,或者直接使用一个非Python的工具,比如NSIS。除了Almad的建议,我不太确定还有什么其他的解决办法。

至于你的第二个问题,你可以考虑看看Paver

撰写回答