gpt4 book ai didi

python - setuptools,提前知道 native 库的轮文件名

转载 作者:行者123 更新时间:2023-12-02 03:00:53 30 4
gpt4 key购买 nike

在运行安装脚本之前有没有一种简单的方法可以知道 Python 轮子的文件名?

我正在尝试生成一个 Bazel 规则,为计算机中安装的每个 Python 版本构建一个 .whl,该库包含 native 代码,因此需要为每个版本单独编译。 Bazel 的问题是它需要提前声明任何输出,而我观察到每个 Python 版本都会生成不同的文件名,没有明显的一致性(malloc 和 unicode 的前缀不同)

2.7  --> lib-0.0.0-cp27-cp27mu-linux_x86_64.whl
3.6m --> lib-0.0.0-cp36-cp36m-linux_x86_64.whl
3.8 --> lib-0.0.0-cp36-cp38-linux_x86_64.whl

我知道作为一种解决方法,我可以拉紧轮子来传递它,但我想知道是否有更干净的方法来做到这一点。

最佳答案

更新

另请参阅更详细的答案 here .

您可以通过查询bdist_wheel命令来获取名称,因为您甚至不需要构建任何东西或编写setup.py脚本(但您需要您传递给 setup 函数的元数据)。示例:

from distutils.core import Extension
from setuptools.dist import Distribution


fuzzlib = Extension('fuzzlib', ['fuzz.pyx']) # the files don't need to exist
dist = Distribution(attrs={'name': 'so', 'version': '0.1.2', 'ext_modules': [fuzzlib]})
bdist_wheel_cmd = dist.get_command_obj('bdist_wheel')
bdist_wheel_cmd.ensure_finalized()

distname = bdist_wheel_cmd.wheel_dist_name
tag = '-'.join(bdist_wheel_cmd.get_tag())
wheel_name = f'{distname}-{tag}.whl'
print(wheel_name)

将打印您所需的名称。请注意,传递给 Distributionattrs 应包含与传递给 setup 函数相同的元数据,否则您可能会得到错误的标签。要重用元数据,可以在 setup.py 脚本中将其组合起来,例如

setup_kwargs = {'name': 'so', 'version': '0.1.2', ...}

dist = Distribution(attrs=setup_kwargs)
...
setup(**setup_kwargs)

关于python - setuptools,提前知道 native 库的轮文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60643710/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com