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

标签 python distutils

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

我创建了一个 list 文件,其中包含 Python 包中的 .pyd 文件,并且所有内容(包括 .pyd 文件)都被 checkin 版本控制。然后,用户可以将其从版本控制中 check out 并安装该模块。

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

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

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

最佳答案

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

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

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

您的用户不会执行python setup.py install,他们会执行pip install yourmodule,并且pip将解析正确的二进制发行版,即.whl 文件根据运行时平台下载并安装。兼容性标 checkout 现在方向盘的文件名中。

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

关于python - 在 python setup.py 中,如何允许用户在不先进行构建的情况下安装我的模块文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230639/

相关文章:

python - Numpy dot 对对称乘法太聪明了

python - scikit-learn 中具有相同属性的跨多列的标签编码

python - Tkinter 与 Python 3.3 : Change colour of button on click

python - 如何告诉 distutils 使用 gcc?

python - 我应该导入哪个库以在 Python 中使用 create shortcut()?

python - 不寻常的符号 - python

Python:字符串到列表列表

setuptools - 如何在 cfg 文件中通过 cmdclass 覆盖 distutils 命令?

python - Numpy distutils 指南

python - 是否可以从 setuptools setup.py 中要求 PyQt?