随着迁移到新的pyproject.toml
系统,我想知道是否有一种方法可以在编译扩展时以可编辑模式安装包(pip install -e .
没有这样做)。
所以我希望pip:
- 运行我为Cython配置的
build_ext
并生成我的.so
文件 - 把它们放到本地文件夹中
- 执行正常可编辑安装的其余步骤
我在pip文档中找到了一些关于build_wheel_for_editable
的内容,但是我找不到任何实际的例子来说明这个钩子应该在哪里实现以及它应该是什么样子的(老实说,我甚至不完全确定这是我要找的)。
那么有人知道如何做到这一点吗?我也很高兴听到任何额外的解释,为什么pip install .
运行build_ext
,但编辑命令不运行。
详情:
我不再有setup.py
文件;这pyproject.toml
使用setuptools并且包含
[build-system]
requires = ["setuptools>=61.0", "numpy>=1.17", "cython>=0.18"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
package-dir = {"" = "."}
[tool.setuptools.packages]
find = {}
[tool.setuptools.cmdclass]
build_ext = "_custom_build.build_ext"
定制的build_ext
如下所示
from setuptools import Extension
from setuptools.command.build_ext import build_ext as _build_ext
from Cython.Build import cythonize
class build_ext(_build_ext):
def initialize_options(self):
super().initialize_options()
if self.distribution.ext_modules is None:
self.distribution.ext_modules = []
extensions = Extension(...)
self.distribution.ext_modules.extend(cythonize(extensions))
def build_extensions(self):
...
super().build_extensions()
它将. pyx构建到. cpp中,然后将它与另一个cpp一起添加到. so中。
1条答案
按热度按时间iszxjhcz1#
我创建了一个如下所示的模块:
我的
pyproject.toml
看起来像:我的setup.py:
而
helloworld.pyx
只包含print("Hello world")
。当我执行
pip install -e .
时,它按预期构建了cython文件。如果你真的不想有一个setup.py,我想你需要覆盖
build_py
而不是build_ext
,但是IMO仅仅有一个简单的setup.py文件并没有什么大不了的。