build
(https://github.com/pypa/build)是制造轮子的好工具。然而,我找不到一种方法来创建我可以使用python setup.py --plat-name=linux_x86_64
进行的特定于平台的轮子。
我尝试过这些方法:
- 添加
setup.cfg
和[bdist_wheel] plat-name=linux_x86_64
内容。它工作得很好,但我想让它动态(在Windows上,我想使用win_amd64
( - 我试过
python -m build -w -n "--config-setting=--plat-name(=linux_x86_64)"
,没有成功
重命名创建的.whl
文件感觉是一个棘手的解决方案。
解决这一问题的最先进的方法是什么?
尽管我多次尝试使用--config-setting
设置plat-name
,但都没有成功。
但是,我找不到一种方法来创建可以使用
python setup.py --plat-name=linux_x86_64
的特定于平台的轮子。
您可以读取setup.py
中的--plat-name
选项并覆盖bdist_wheel
。
from setuptools import setup
from wheel.bdist_wheel import bdist_wheel
def get_plat_name():
"""Parses value of the --plat-name from the program arguments."""
class wheel(bdist_wheel):
def finalize_options(self):
super().finalize_options()
self.plat_name = get_plat_name()
setup(cmdclass={"bdist_wheel": wheel})
使用bdist_wheel
setuptools命令
我应用的解决方案非常简单。以下是setup.py
的相关部分。
from wheel.bdist_wheel import bdist_wheel
class BDistWheel(bdist_wheel):
def get_tag(self) -> List[str]:
return (self.python_tag, "none", "linux")
cmdclass = {
"bdist_wheel": BDistWheel,
}
setup(
...
cmdclass=cmdclass,
...
)
这将创建一个名为<name>-<version>-py3-none-linux.whl
的包。CCD_ 17是从返回的用于CCD_ 18函数的元组生成的。您可以在PEP-427中找到更多信息。
带扩展
构建系统假设,如果Python包是用扩展构建的,那么它是特定于平台的。这实际上是有道理的;纯";Python包通常是独立于平台的。这里有一个过于简单的解决方案来展示构建的扩展如何影响标签:
from setuptools import Extension
from setuptools.command.build_ext import build_ext
class DummyExtension(Extension):
def __init__(self):
super().__init__("dummy.extension", sources=[])
class DummyExtensionBuild(build_ext):
def run(self) -> None:
return
cmdclass = {
"build_ext": DummyExtensionBuild,
}
setup(
...
cmdclass=cmdclass,
...
)
这将创建一个非常特定的轮子:<name>-<version>-cp38-cp38-linux_x86_64.whl
。
当然,您也可以通过应用第一种方法来覆盖标记。
不需要创建自定义命令类。显式提供plat_name
的语法如下:
from setuptools import setup
def get_platname():
# do whatever you need here
return "potato"
setup(
name="myproj",
version="0.1",
options={
"bdist_wheel": {
"plat_name": get_platname(),
},
},
)
使用纯pyproject.toml
设置,可以通过以下方式设置平台:
python -m build -w -C="--global-option=--plat-name" -C="--global-option=anything_you_like_here"
感谢@sinoroc在上面的评论中分享了这个链接:https://github.com/pypa/build/issues/202