python - 如何使用 abi 标签创建一个完整的轮子?

标签 python setuptools cpython abi python-wheel

尝试使用此 setup.py 从空项目创建轮子:

设置.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 标签中选择 py35 和 cp35?

最佳答案

经过大量搜索,我终于在 '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 文件,它会为每个版本/架构创建一个特定于平台的轮子。

关于python - 如何使用 abi 标签创建一个完整的轮子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60379212/

相关文章:

python-3.x - 在 src 布局中使用 attr 时出现 ModuleNotFoundError

python - 为什么我必须担心 CPython 中的线程安全?

Python 与 Cpython

python - 使用 CMake 自动安装 Python 依赖项

python - CPython 实现的内部文档

python - mypy:是否可以为复杂类型定义快捷方式?

python - 识别递归函数中的序列

python - 如何使用 Mu 和 Sigma 在 Python 中获得对数正态分布?

javascript - 使用 Python,从 Javascript 获取 JSON 变量

python - 如何覆盖 setup.py 默认使用的编译器 (GCC) 标志?