Python的C和C ++库如何跨平台?

最大888

Python的许多库(例如Pandas和Numpy)实际上都是C或C ++,并带有Python包装器。我没有编译语言的经验,也不了解这些库是如何跨平台的(即在Mac,Windows,Linux上运行的),因为我的理解是C和C ++需要针对特定​​的操作系统进行编译。这是如何运作的?

编辑:
如何为不同的OS /版本的Python编译Python C / C ++扩展?无法回答我的问题,因此这不是重复的。这个问题是关于理解它是如何工作的,这个问题是对这种理解的推论,并且是关于实现的。

苹果派

正如评论中所指出的那样,使用C / C ++编译代码的Python程序包要求在目标体系结构上进行编译,以使其跨平台。

在幕后,pip install pandas例如,当您使用时,pip会在PyPI上查找请求的软件包,如果有,它将安装wheel与您的特定系统相对应的软件包wheel是一种分发机制,可帮助在特定的python分发版和/或目标体系结构上安装python软件包。再次以熊猫为例,今天上午返回的是升级后的熊猫:

applepie:~ applepie$ pip install pandas --upgrade
Collecting pandas
  Downloading pandas-1.1.3-cp38-cp38-macosx_10_9_x86_64.whl (10.1 MB)
     |████████████████████████████████| 10.1 MB 7.2 MB/s 
Requirement already satisfied, skipping upgrade: numpy>=1.15.4 in ./.pyenv/versions/3.8.5/lib/python3.8/site-packages (from pandas) (1.19.2)
Requirement already satisfied, skipping upgrade: pytz>=2017.2 in ./.pyenv/versions/3.8.5/lib/python3.8/site-packages (from pandas) (2020.1)
Requirement already satisfied, skipping upgrade: python-dateutil>=2.7.3 in ./.pyenv/versions/3.8.5/lib/python3.8/site-packages (from pandas) (2.8.1)
Requirement already satisfied, skipping upgrade: six>=1.5 in ./.pyenv/versions/3.8.5/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)
Installing collected packages: pandas
  Attempting uninstall: pandas
    Found existing installation: pandas 1.1.2
    Uninstalling pandas-1.1.2:
      Successfully uninstalled pandas-1.1.2
Successfully installed pandas-1.1.3

请注意,执行的第一步是下载与我的特定体系结构(Mac OSX,x86_64)匹配的.whl文件。该文件名包含更多信息,例如pandas v 1.1.3并与CPython 3.8兼容。在另一台机器上运行此命令将产生不同的输出。

您可以查看可用于pip的文件列表,以直接在PyPI上查找。再次,在PyPI上查找熊猫表明,在CPython 3.8上Mac OSX的最新轮子被命名为pandas-1.1.3-cp38-cp38-macosx_10_9_x86_64.whl,这毫不奇怪是pip install pandas --upgrade 下载和安装的。

我不是python发行方面的专家,实际上我才刚刚接触python轮子,从未发行过python代码,因此在回答此问题之前必须进行一些阅读,但是据我了解,Python包中包含C / C ++组件首先需要对每种架构进行编译,然后针对python版本和计算机架构的组合构建特定的轮子。如果找不到兼容的转盘,则可能需要使用C / C ++安装Python软件包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章