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

求基于src布局、使用meson-python打包的Cython项目最小示例及测试配置

基于src布局+Meson-Python+Cython的最小项目示例

完整目录结构

my_cython_project/
├── pyproject.toml
├── meson.build
├── src/
│   └── mycythonpkg/
│       ├── __init__.py
│       └── math_ops.pyx
└── tests/
    ├── __init__.py
    └── test_math_ops.py

1. pyproject.toml 核心配置

指定构建系统依赖与项目基础信息:

[build-system]
requires = ["meson-python>=0.13.0", "cython>=3.0.0"]
build-backend = "mesonpy"

[project]
name = "mycythonpkg"
version = "0.1.0"
authors = [{ name = "Your Name", email = "your@email.com" }]
description = "Minimal Cython project using src layout and meson-python"
requires-python = ">=3.8"

2. meson.build 编译配置

处理Cython扩展编译与src布局适配:

project('mycythonpkg', 'python',
        version : '0.1.0',
        default_options : ['warning_level=3'])

# 导入Python与Cython模块
py = import('python')
cy = import('cython')

# 安装Python包的纯Python文件
py.install_sources(
    'src/mycythonpkg/__init__.py',
    subdir : 'mycythonpkg'
)

# 编译Cython文件为C扩展
cython_ext = cy.cython(
    'src/mycythonpkg/math_ops.pyx',
    output : 'math_ops'
)

# 构建并安装扩展模块,对应src下的包路径
py.extension_module(
    'math_ops',
    cython_ext,
    install : true,
    install_dir : 'mycythonpkg'
)

3. src目录下的包文件

src/mycythonpkg/init.py

导出Cython扩展的功能,简化外部调用:

from .math_ops import add_numbers

__all__ = ['add_numbers']

src/mycythonpkg/math_ops.pyx

简单的Cython示例代码:

def add_numbers(int a, int b):
    return a + b

4. tests目录配置与使用

tests目录放在项目根目录(与src同级),符合Python项目常规布局:

tests/test_math_ops.py

测试示例代码:

import mycythonpkg

def test_add_numbers():
    assert mycythonpkg.add_numbers(2, 3) == 5
    assert mycythonpkg.add_numbers(-1, 1) == 0

运行测试步骤

  1. 以可编辑模式安装项目(方便开发时实时更新):
pip install -e .
  1. 安装测试依赖(如pytest):
pip install pytest
  1. 执行测试:
pytest tests/ -v

关键注意事项

  • meson.build中,py.install_sources的subdir和py.extension_module的install_dir必须与src下的包名完全一致,确保Python能正确识别包结构。
  • 修改Cython代码后,需重新运行pip install -e .触发重新编译。
  • 确保meson-python与Cython的版本满足pyproject.toml中的最低要求,避免兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:07:18