Python轮子强制ABI为“none”

24
我觉得这是一个简单的问题,但我还没有找到答案,所以我在这里发布帖子。 我有一个 Python 3 应用程序,将其打包成平台wheel。 我有setup.py和一切按预期工作。唯一无法弄清楚的是生成的wheel始终包括ABI标记(例如“ cp34m”),当包含该标记时,我发现实际上无法通过pip安装wheel。(我的构建脚本在运行之前安装了最新的pip、setuptools和wheel)
解决方案很简单。我只需更改 wheel 的文件名,将 “cp34m” 改为 “none”。显然,这很容易添加到我的构建脚本中,但我想知道是否可能设置 bdist_wheel 或其他选项,使生成的 .whl 文件自动拥有 none?
我用来创建 wheel 的命令是(例如在 x64 上): python setup.py bdist_wheel --plat-name win_amd64
这将创建一个类似于以下内容的wheel:
mpf_mc-0.30.0.dev269-cp34-cp34m-win_amd64.whl
然后我将其重命名后上传到 PyPI:
mpf_mc-0.30.0.dev269-cp34-none-win_amd64.whl
手动重命名后一切似乎都正常工作。 但我想知道这是否是正确的做法,或者我是否错过了什么?

我有同样的问题,对此感到困惑。https://dev59.com/CJPfa4cB1Zd3GeqPCmfn?rq=1 对我也没有启发。 - Stephan
2个回答

1

没有看到你的setup.py文件,很难回答,但我会给出我的想法:


你的解决方案有效的原因

所以,我猜测当你使用原始名称时事情不起作用的原因是:

  1. pip 不会让你使用 ABI 标记的 m 部分进行安装... 可能 是因为它还没有经过审查,而不是因为任何真正的问题,和/或者
  2. 你实际上并没有使用依赖于 malloc 的 Cython 的任何方面。

添加ABI标签的原因

现在,如果我们假设没有真正需要m标签,就像我说的那样,那么它被添加的原因可能是你的设置文件中有一个需要它的依赖。

我主要是数据科学家,所以我将使用一个常见的例子:numpy编译成C代码,并且有许多Python调用该低级语言来提高速度。即使我编写纯Python 3代码,并且根本不使用numpy,如果我的设置文件中有一个依赖项要求numpy,那么我将拥有平台特定的构建。然而,更常见的是我实际上正在使用numpy,但我可能没有使用任何依赖于C的方面。(在numpy中,这很少见,因为所有数组初始化都发生在C中,但我希望你能理解这个想法。)我不知道是什么力量导致ABI特定的构建,但我猜测你有一些依赖项要求它,但实际上从未使用过它。


0

看起来自你发问以来有些变化 - 我刚刚尝试在我的项目中使用你的命令创建一个wheel文件:

~$ python setup.py bdist_wheel --plat-name win_amd64

结果文件为:

my_project-1.0.0-py2-none-win_amd64.whl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接