Python中有什么方法能批量将py文件生成pyd文件吗?

目录结构如下

│  main.py
│
└─src
    ├─pack1
    │  ├─module1
    │  │      mod1.py
    │  │      __init__.py
    │  │
    │  └─module2
    │          mod2.py
    │          __init__.py
    │
    └─pack2
        ├─module3
        │      3.py
        │      __init__.py
        │
        └─module4
                4.py
                __init__.py

入口文件为 main.py

src 目录下存在着各个模块。

现在想批量将 src 目录中的 py 文件转为 pyd 文件,请问下有什么方法吗?

网上搜索的都是将一个文件转为 pyd,求大家指导。


Python中有什么方法能批量将py文件生成pyd文件吗?

6 回复

pyd?

但看 lz 的描述是生成 pyc 啊?
python -m compileall -f -b dir


Cythonsetup.py 配合 glob 或者 setuptoolsfind_packages 就能批量编译。

核心思路是写一个 setup.py,在 Extension 里用通配符匹配所有 .py 文件,然后执行 python setup.py build_ext --inplace

下面是一个完整示例,假设项目结构如下:

project/
├── mymodule/
│   ├── __init__.py
│   ├── module1.py
│   └── module2.py
└── setup.py

setup.py 内容:

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

# 找到 mymodule 下所有 .py 文件(排除 __init__.py 如果需要的话)
py_files = glob.glob("mymodule/*.py")
extensions = [
    Extension(
        name=path.replace("/", ".").replace(".py", ""),  # 例如 mymodule.module1
        sources=[path]
    )
    for path in py_files if not path.endswith("__init__.py")  # 可选排除 __init__.py
]

setup(
    name="mymodule",
    ext_modules=cythonize(
        extensions,
        compiler_directives={'language_level': "3"}
    )
)

然后在项目根目录运行:

python setup.py build_ext --inplace

这会在 mymodule/ 下生成对应的 .pyd(Windows)或 .so(Linux/Mac)文件。

如果想更精细控制(比如排除某些文件、指定输出目录),可以调整 glob 模式或者在 Extension 里加 exclude 逻辑。

一句话总结:用 Cythonize 加通配符批量编译。

网上搜索的都是将一个文件转为 pyd

写个脚本,遍历一下所有文件,按照你说的单个文件转 pyd 的方式转一遍啊。

你写 py 的还想不到怎么批量处理任务吗。。

pyd 是 python 的 c 语言 so 文件或者 dll,py 生成的是 pyc

回到顶部