Python 车轮包 Linux 对比 windows

Python wheel packages Linux vs windows

是否可以对 Linux、windows 等使用相同的 python 包(wheel 文件)?我问这个是因为一些软件包不仅包括 python 文件,还包括 EXE,我认为它们是 python 代码转换为 exe(至少使用 pip.exe 和 Django 管理工具)。 Exe 文件是特定于平台的,就像 windows 和 Linux 有单独的 python 解释器一样,因此出现了一个问题。

A Python wheel 是一种打包格式,不是执行格式。它基本上是一个 .zip 文件。

此外:

https://packaging.python.org/discussions/wheel-vs-egg/

...when the distribution only contains Python files (i.e. no compiled extensions), and is compatible with Python 2 and 3, it’s possible for a wheel to be “universal”, similar to an sdist.

来自同一个link:

A single wheel archive can indicate its compatibility with a number of Python language versions and implementations, ABIs, and system architectures.

换句话说,"wheel" 格式被设计为尽可能可移植...并且它还允许您根据需要包含特定于平台的内容。

一些wheel包是跨平台的;有些是特定于平台的。

此信息包含在方向盘的名称中。对于 example:

pytz-2018.4-py2.py3-none-any.whl (510kB)

py2.py3 意味着它适用于任何 Python 实现,Python 2.x 和 3.x,none-any 意味着它适用于任何平台。 This one更具体:

numpy-1.14.3-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl

cp36-cp36m 表示它仅适用于 CPython 3.6,macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64 表示它是为 x86_64 macOS 版本 10.9-10.10 构建的。 (粗略地说,这是 macOS 的最低和推荐版本;大多数其他平台并不那么复杂。)


包成为特定于平台的最常见原因是它包含 C API 扩展模块,numpy 就是这种情况。但可能还有其他原因。例如,它可能包含 subprocess 的本机可执行文件,或者它可能使用 ctypes 访问系统 APIs 等