setuptools,提前知道本机库的 wheel 文件名
setuptools, know in advance the wheel filename of a native library
在 运行 安装脚本之前,是否有一种简单的方法可以知道 Python 车轮的文件名?
我正在尝试生成一个 Bazel 规则,为机器中安装的每个 Python 版本构建一个 .whl,该库包含本机代码,因此需要为每个版本单独编译。 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
我知道作为一种解决方法,我可以拉动轮子来传递它,但我想知道是否有更简洁的方法来做到这一点。
更新
另请参阅更详细的答案 。
您可以通过查询 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)
会打印出你想要的名字。请注意,传递给 Distribution
的 attrs
应该包含传递给 setup
函数的相同元数据,否则您可能会得到错误的标记。要重用元数据,在 setup.py
脚本中可以将其组合,例如
setup_kwargs = {'name': 'so', 'version': '0.1.2', ...}
dist = Distribution(attrs=setup_kwargs)
...
setup(**setup_kwargs)
在 运行 安装脚本之前,是否有一种简单的方法可以知道 Python 车轮的文件名?
我正在尝试生成一个 Bazel 规则,为机器中安装的每个 Python 版本构建一个 .whl,该库包含本机代码,因此需要为每个版本单独编译。 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
我知道作为一种解决方法,我可以拉动轮子来传递它,但我想知道是否有更简洁的方法来做到这一点。
更新
另请参阅更详细的答案
您可以通过查询 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)
会打印出你想要的名字。请注意,传递给 Distribution
的 attrs
应该包含传递给 setup
函数的相同元数据,否则您可能会得到错误的标记。要重用元数据,在 setup.py
脚本中可以将其组合,例如
setup_kwargs = {'name': 'so', 'version': '0.1.2', ...}
dist = Distribution(attrs=setup_kwargs)
...
setup(**setup_kwargs)