python - setuptools,提前知道原生库的wheel文件名
问题描述
在运行设置脚本之前,有没有一种简单的方法可以知道 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)
会打印你想要的名字。请注意,attrs
传递给Distribution
应该包含您传递给setup
函数的相同元数据,否则您可能会得到错误的标签。要重用元数据,setup.py
可以在脚本中将其组合起来,例如
setup_kwargs = {'name': 'so', 'version': '0.1.2', ...}
dist = Distribution(attrs=setup_kwargs)
...
setup(**setup_kwargs)
推荐阅读
- python - Python解压缩并将“_”添加到新提取的文件中
- asp.net-core - 有人能解释一下 ASP.NET 中的生产和开发是如何工作的吗
- python - 其他谷歌云服务账户的云作曲家认证
- c# - 如何检测 Windows 是否支持运行 x64 进程?
- c# - 如何在asp.net c#中将子页面的内容加载到div中
- javascript - 从类值打字稿创建数组
- visual-studio-code - vscode 无法解析相对路径
- ruby-on-rails - 得到一个 NoMethodError: undefined method `id' for nil:NilClass
- spring-boot - Spring Security:表单登录无法正常工作
- format - 是否可以调整 Google Data Studio 中标签的位置?