You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何手动调用ninja编译PyTorch的C++扩展,无需每次执行pip?

手动编译pybind11扩展的方法

方法1:直接调用setup.py的build_ext命令

这是适配你当前配置最便捷的方案,不需要手动处理构建配置,直接执行以下命令即可:

python setup.py build_ext --inplace

该命令会直接触发torch的CppExtension构建流程,默认调用ninja完成编译,编译生成的扩展库(.so/.pyd文件)会直接输出到项目根目录,跳过了pip install流程中的依赖校验、包元数据生成、软链接创建等冗余步骤,耗时仅等于C++代码的编译时长。

方法2:直接手动调用ninja

只要你已经运行过一次build_ext命令,构建目录下就会自动生成ninja的配置文件,后续修改C++代码后可以直接调用ninja编译,连构建配置生成的步骤都能省略:

  • 找到构建生成的ninja配置目录,默认路径为./build/temp_<系统架构>_<Python版本>/,比如Linux下Python3.10对应的路径就是./build/temp.linux-x86_64-cpython-310/
  • 进入该目录后执行ninja命令即可完成增量编译
  • 编译完成后把生成的扩展库文件复制到项目根目录即可使用

额外优化建议

  • 如果你修改的是纯Python代码,完全不需要重新编译C扩展,只有修改TaskManager.cpp等C源码时才需要执行编译操作
  • 可以在项目根目录创建Makefile简化操作,示例内容:
# 直接通过setup.py编译
build:
	python setup.py build_ext --inplace

# 直接调用ninja增量编译
fast-build:
	cd ./build/temp* && ninja && cp *.so ../../

之后每次编译仅需执行make build或者make fast-build即可。

内容的提问来源于stack exchange,提问作者Felix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:06:06