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