我创建了一个包含一些C功能的Python模块。我的潜在用户正在使用MS Windows,我正在使用distutils将c功能构建到.pyd文件中。
我创建了一个清单文件,其中包含Python包中的.pyd文件,所有内容(包括.pyd文件)都被检入版本控制。然后,用户可以从版本控制中检查它并安装模块。
该模块的大多数用户将无法从源代码重建.pyd文件,因为他们没有安装Visual Studio,并且他们不一定能够访问链接源代码所需的库。所以我希望他们能够使用我在包中包含的.pyd文件。
问题是当用户执行python setup.py install
时,它有时会尝试重建.pyd文件,具体取决于.pyd文件和源文件的相对时间戳。我无法控制以后的时间戳,我认为这取决于它们从版本控制中获取文件的顺序。
处理这种情况的正确方法是什么?
处理这种情况的正确方法是构建和分发标记为windows的wheel。除了(或代替)发布源代码分发之外,您还可以这样做。
pip install --upgrade setuptools wheel
python setup.py build bdist_wheel
这将在.whl
子目录下生成一个./dist/
文件,然后将其上传到索引(或者您可以直接向用户发送分发文件)。
你的用户不会做python setup.py install
,他们会做pip install yourmodule
和pip将解析正确的二进制发行版,即.whl
文件,以便根据运行时平台下载和安装。兼容性标签存在于滚轮的文件名中。
如果您希望支持多个平台,则可能需要为不同平台构建标记的单独轮子。