【问题标题】:How to create a full wheel with abi tag?如何用 abi 标签创建一个完整的轮子?
【发布时间】:2020-06-08 06:39:49
【问题描述】:

尝试从一个空项目创建一个轮子,使用这个setup.py

setup.py

​​>
from setuptools import setup
setup(name='bla', version='1')

我用python setup.py bdist_wheel --python-tag py35 --plat-name linux_x86_64 调用并得到 bla-1-py35-none-linux_x86_64.whl

我的机器统计


python -V: Python 3.6.9
uname -p: x86_64
  1. 如何强制执行 abi? (让它bla-1-py35-cp35-linux_x86_64.whl
  2. 如何在我的 python-tag 中选择 py35 和 cp35?

【问题讨论】:

  • 使用 Python 3.5 构建轮子。
  • 我猜应该是--py-limited-api cp35,但在我的快速测试中似乎没有效果。

标签: python setuptools cpython abi python-wheel


【解决方案1】:

经过大量搜索,我终于在'pip setup.py bdist_wheel' no longer builds forced non-pure wheels找到了一个可行的解决方案

基本上,如果 setup.py 认为你有一个二进制发行版,它会创建一个带有特定版本的 python、ABI 和当前架构的轮子。您可以通过覆盖 Distribution 类中的“has_ext_modules”函数来做到这一点。正如https://stackoverflow.com/users/5316090/py-j建议的那样:

from setuptools import setup
from setuptools.dist import Distribution

DISTNAME = "packagename"
DESCRIPTION = ""
MAINTAINER = ""
MAINTAINER_EMAIL = ""
URL = ""
LICENSE = ""
DOWNLOAD_URL = ""
VERSION = '1.2'
PYTHON_VERSION = (2, 7)


# Tested with wheel v0.29.0
class BinaryDistribution(Distribution):
    """Distribution which always forces a binary package with platform name"""
    def has_ext_modules(foo):
        return True


setup(name=DISTNAME,
      description=DESCRIPTION,
      maintainer=MAINTAINER,
      maintainer_email=MAINTAINER_EMAIL,
      url=URL,
      license=LICENSE,
      download_url=DOWNLOAD_URL,
      version=VERSION,
      packages=["packagename"],

      # Include pre-compiled extension
      package_data={"packagename": ["_precompiled_extension.pyd"]},
      distclass=BinaryDistribution)

然后,您可以从所需的任何 Python 版本/架构运行 setup.py 文件,它会为每个版本/架构创建一个特定于平台的轮子。

【讨论】:

  • 非常感谢您的回答!它奏效了,为我节省了大量时间!
【解决方案2】:

ABI 标记取决于您的 Python 版本。它将自动添加到您的车轮文件名中。命令python setup.py bdist_wheel 足以构建wheel 文件。

要创建带有不同ABI标签的wheel包,一个简单的方法是在不同的Docker容器中运行不同的Python版本。

我发布到 pypi.org 的轮子包

我的包名模式(package-cp(python version)-cp(python version)m-manylinux1_x86_64.whl)和你的有点像。您不能将 cp35 添加到使用 Python 3.6 构建的包中。

【讨论】:

  • 你试过了吗?这显然不是我的例子
  • @CIsForCookies 当然。这就是我制造轮子的方式。我已经在 pypi.org 上发布了一些轮子包。
猜你喜欢
  • 2015-10-12
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
相关资源
最近更新 更多