Python轮力ABI到"无"

时间:2016-03-15 19:16:39

标签: python python-wheel

我认为这是一个简单的问题,但我还没有找到答案,所以我在这里发帖。

我有一个Python 3应用程序,我打包成一个平台轮。我有setup.py,一切都按预期工作。我唯一能做的就是生成的轮子总是包含一个ABI标签(比如" cp34m"),当包含它时我发现我实际上无法安装轮子通过点子。 (我的构建脚本在运行之前会安装最新的pip,setuptools和wheel。)

解决方案很简单。我只是改变了轮子的文件名来改变" cp34m"到"无"。这显然很容易添加到我的构建脚本中,但我想知道是否可以为bdist_wheel设置一个选项,以便生成的.whl文件没有自己设置?

我用来创建滚轮的命令是(例如在x64上):

python setup.py bdist_wheel --plat-name win_amd64

这样就形成了一个轮子:

mpf_mc-0.30.0.dev269-cp34-cp34m-win_amd64.whl

然后我在上传到PyPI之前重命名为:

mpf_mc-0.30.0.dev269-cp34-none-win_amd64.whl

通过手动重命名,一切似乎都能正常工作。但我想知道这是否是正确的方法,或者我错过了什么?

2 个答案:

答案 0 :(得分:1)

如果不查看您的setup.py文件,很难回答这个问题,但是我会考虑的:

  • 车轮后缀的命名是python标签,ABI标签和平台标签as shown here的组合。但这听起来您已经知道了。
    • This link explaining it all不太正式,但更清晰,here is the definition of ABI。 以我的无知理解,ABI是应用程序之间的服务级别协议(接口)。
    • 出于Python的目的,ABI通常与python标签相同,并附带一些其他信息,例如m,这意味着{{3 }}。

使您的解决方案有效

所以,我猜想当您使用原始名称并在更改名称后可以正常工作时无法工作的原因是

  1. pip不允许您使用ABI标签的m部分来安装东西... 可能,因为它尚未经过审查,也不是因为任何真实的问题和/或
  2. 您实际上不是 使用依赖malloc的Cython的任何方面。

添加ABI标签的原因

现在,如果像我说的那样,假设我们并不需要m标记,那么可能添加它的原因是安装文件中有一个需要它的依赖项。 / p>

我主要是一名数据科学家,所以我将使用一个常见的示例:numpy被编译为C代码,并且有许多使用该较低级语言的Python调用来提高速度。即使我编写了纯Python 3代码,甚至都不在任何地方使用numpy ,如果我的安装文件中有一个要求numpy的依赖项,那么我将特定于平台的版本。但是,更常见的是实际上我正在使用numpy,但是我可能没有使用依赖C的任何方面。(在numpy中,这很罕见,因为所有数组初始化都在C,但我希望您能明白。)我不知道是什么推动了ABI特定的构建,但是我猜您有一些依赖要求,但是从未真正使用过。

答案 1 :(得分:0)

自从您发布问题后,似乎已经发生了一些变化 - 我只是尝试使用您的命令在我自己的项目中创建一个滚轮文件:

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

,结果文件为:

my_project-1.0.0-py2-none-win_amd64.whl