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

标签 python c++ c

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

去年关闭。




Improve this question




许多 Python 的库,例如Pandas 和 Numpy 实际上是 C 或 C++,带有 Python 包装器。我没有编译语言的经验,也不了解这些库是如何跨平台的(即在 Mac、Windows、Linux 上运行),因为我的理解是 C 和 C++ 需要针对特定​​的操作系统进行编译。这是如何运作的?
编辑:
How do you compile Python C/C++ extensions for different OS/versions of Python?没有回答我的问题,因此这不是重复的。这个问题是关于理解它是如何工作的,这个问题假设了这种理解并且是关于实现的。

最佳答案

正如评论中指出的那样,使用 C/C++ 编译代码的 Python 包需要在目标架构上进行编译才能跨平台。
在引擎盖下,当您使用 pip install pandas 时例如,pip 将在 PyPI 上查找请求的包,如果可用,它将安装 wheel对应于您的特定系统。轮子是一种分发机制,可帮助在特定的 Python 分发和/或目标架构上安装 Python 包。再次以pandas为例,这是今天早上pandas的升级返回:

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 兼容。在不同的机器上运行这个命令会产生不同的输出。
您可以直接在 PyPI 上查看 pip 的可用文件列表。再次,寻找 pandas on 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代码,不得不做some reading prior to answering this question ,但是我的理解是,带有 C/C++ 组件的 Python 包首先需要在每个架构上进行编译,然后为 Python 版本和计算机架构的组合构建一个特定的轮子。如果找不到兼容的轮子,则使用 C/C++ 安装 Python 包可能需要编译。

关于python - Python 的 C 和 C++ 库如何跨平台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64261360/

相关文章:

python - 除了浏览器扩展之外,还有其他方法可以将 GUI 栏悬停在用户访问的任何网站上吗?

python - 在 CentOS 8 上使用 crontab 时是否有用于 HTTP 请求的页面缓存?

c++ - push_back 上的段错误

c++ - -lstdc++ 和 -lstdc++11 之间的区别

c++ - 在 C++ 中将一个巨大的文本文件 (2Gb+) 拆分为 2 个 block

c - 在 C 的同一行中读取字符串和各种整数

c - 在 C 中,结构成员可以使用与类型相同的名称吗?

python - 使用python时gnuplot语法错误

c - 套接字编程 connect() 在我第二次运行循环时失败

python - 使用 sklearn 缩放的 pandas 数据框列