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

如何配置setup.py让Cython仅生成.PYD文件 隐藏.C与BUILD目录

Cython编译隐藏中间文件setup.py实现方案

核心实现逻辑

  • 借助系统临时目录存放所有编译中间产物,全程不会在用户工作目录生成C文件、build目录等内容
  • 临时目录默认仅当前操作用户可访问,编译完成后自动销毁无残留,完全避免中间文件泄露
  • 最终仅输出.pyd文件到指定目录,符合闭源分发的要求

完整可运行代码

import os
import shutil
import tempfile
from setuptools import Extension, setup
from Cython.Build import cythonize

if __name__ == "__main__":
    # -------------------------- 自定义配置区 --------------------------
    # 替换为你需要编译的.pyx文件路径,支持多文件
    pyx_source_list = ["./your_module.pyx"]
    # 最终生成的.pyd文件存放路径
    pyd_output_path = "./dist"
    # -------------------------------------------------------------------

    os.makedirs(pyd_output_path, exist_ok=True)

    # 上下文管理器自动管理临时目录生命周期,退出作用域后自动彻底删除
    with tempfile.TemporaryDirectory() as temp_build_dir:
        # 给临时目录设置权限:仅当前用户有读写执行权限,其余用户无任何权限
        os.chmod(temp_build_dir, 0o700)

        # 生成扩展模块配置
        ext_modules = []
        for pyx_path in pyx_source_list:
            module_name = os.path.splitext(os.path.basename(pyx_path))[0]
            ext_modules.append(Extension(name=module_name, sources=[pyx_path]))

        # 执行编译:所有中间产物全部定向到临时目录
        setup(
            ext_modules=cythonize(ext_modules, build_dir=temp_build_dir),
            script_args=[
                "build_ext",
                f"--build-base={temp_build_dir}",
                f"--build-lib={temp_build_dir}"
            ]
        )

        # 将编译完成的.pyd文件移动到指定输出目录
        for filename in os.listdir(temp_build_dir):
            if filename.endswith(".pyd"):
                target_path = os.path.join(pyd_output_path, filename)
                if os.path.exists(target_path):
                    os.remove(target_path)
                shutil.move(os.path.join(temp_build_dir, filename), target_path)

使用说明

  • 替换代码中pyx_source_list配置项为你实际的.pyx文件路径,支持传入多个文件批量编译
  • 修改pyd_output_path可自定义.pyd文件的输出目录
  • 执行python setup.py build_ext即可完成编译,全程工作目录不会生成任何C文件、build目录等中间产物,仅输出目录下会有最终的.pyd文件
  • 如在Linux下使用,将后缀判定改为.so即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:27:02