如何创建带有 abi 标签的完整轮子?

CIs*_*ies 3 python cpython abi setuptools python-wheel

尝试使用以下命令从空项目创建轮子setup.py

安装程序.py


from setuptools import setup
setup(name='bla', version='1')
Run Code Online (Sandbox Code Playgroud)

我调用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
Run Code Online (Sandbox Code Playgroud)
  1. 如何执行abi?(使其成为bla-1-py35-cp35-linux_x86_64.whl
  2. 如何在我的 python 标签中决定 py35 和 cp35 之间?

小智 8

经过我自己的大量搜索后,我终于在“pip setup.py bdist_wheel”中找到了一个可行的解决方案,不再构建强制的非纯轮子

基本上,如果 setup.py 认为您有一个二进制发行版,它将使用特定版本的 python、ABI 和当前架构创建一个轮子。您可以通过覆盖 Distribution 类中的“has_ext_modules”函数来做到这一点。正如/sf/users/372126331/所建议的:

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)
Run Code Online (Sandbox Code Playgroud)

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