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

如何将多个Python(.py)文件编译为单个.pyd文件?

如何将多个Python文件编译为单个.pyd文件

完全可以实现将多个Python文件打包成单个.pyd文件,下面是具体的操作步骤:

步骤1:整理项目结构与创建主Cython入口

假设你的项目包含多个Python模块,比如module1.py、module2.py、utils.py,首先创建一个主Cython文件(比如main_module.pyx),在这个文件中导入所有需要打包的模块内容,确保外部能访问到这些模块的功能:

# main_module.pyx
from module1 import *
from module2 import *
from utils import *

如果有特定需要暴露的类、函数或变量,也可以在这里显式导出,比如:

# 显式导出需要外部访问的对象
__all__ = ["func_from_module1", "ClassFromModule2", "CONST_FROM_UTILS"]

步骤2:编写编译脚本setup.py

创建setup.py文件,使用Cython和setuptools来配置编译参数,指定将所有模块合并编译为单个.pyd:

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

# 列出所有需要包含的Python源文件
py_modules = ["module1.py", "module2.py", "utils.py"]
# 主Cython入口文件
main_pyx = "main_module.pyx"

# 配置扩展模块
ext = Extension(
    name="my_combined_pyd",  # 最终生成的.pyd文件名(不含后缀)
    sources=[main_pyx] + py_modules,
    # 编译优化参数:Windows用/O2,Linux/macOS用-O3
    extra_compile_args=["/O2"] if os.name == "nt" else ["-O3"],
)

setup(
    name="my_combined_pyd",
    ext_modules=cythonize(ext, language_level="3"),  # 指定Python版本为3.x
)

步骤3:执行编译命令

打开终端,进入项目目录,运行以下命令进行编译:

python setup.py build_ext --inplace

编译完成后,你会看到生成的my_combined_pyd.pyd文件(Windows系统下),Linux/macOS则是.so文件,这个文件就是整合了所有Python模块的单个编译文件。

注意事项

  • 确保所有模块的导入路径正确,避免相对导入问题,必要时可以在setup.py中通过include_dirs参数添加模块所在目录。
  • 如果项目存在循环导入,需要先调整模块结构消除循环,否则会导致编译失败。
  • 编译时可以根据需求调整优化参数,比如添加-march=native(Linux/macOS)来针对当前CPU进行深度优化。
  • 使用编译后的.pyd文件时,直接通过import my_combined_pyd即可访问原各个模块的功能,比如my_combined_pyd.func_from_module1()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 23:52:41