在python setup.py中,如何允许用户安装模块的文件而不先进行构建?

时间:2019-03-18 21:57:54

标签: python distutils

我创建了一个包装一些C功能的Python模块。我潜在的用户正在使用MS Windows,并且我正在使用distutils将c功能构建到.pyd文件中。

我创建了一个清单文件,该清单文件在Python软件包中包含.pyd文件,所有内容(包括.pyd文件)都被检入版本控制。然后,用户可以从版本控制中签出它并安装模块。

该模块的大多数用户将无法从源代码重建.pyd文件,因为他们没有安装Visual Studio,而且他们不一定有权访问链接源代码所需的库。因此,我希望他们能够使用包装中包含的.pyd文件。

问题是用户执行python setup.py install时,有时会尝试重建.pyd文件,具体取决于.pyd文件和源文件的相对时间戳。我无法控制稍后的时间戳,我认为这取决于从版本控制中获取文件的顺序。

处理这种情况的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

处理这种情况的正确方法是构建并分发为Windows标记的wheel。除了(或代替发布)源代码发行版,您还将执行此操作。

pip install --upgrade setuptools wheel
python setup.py build bdist_wheel

这将在.whl子目录下生成一个./dist/文件,然后将其上传到索引(或者您可以直接向用户发送分发文件)。

您的用户不会执行python setup.py install,他们会执行pip install yourmodule,并且pip将解析正确的二进制分发文件,即.whl文件,以根据运行时平台进行下载和安装。车轮的文件名中包含兼容性标签。

如果您希望支持多个平台,则可能需要构建为不同平台标记的单独轮子。