使用scikit-build-core+pyproject.toml在pip install时自动测试Python包
自动测试scikit-build-core构建Python包的安装有效性
针对你的需求,这里提供几种可行的方案,完全满足验证安装后Python绑定可用性的需求,且无需依赖scikit-build-core触发测试:
方案1:自定义pip安装后触发测试
通过setuptools自定义安装命令,在pip install完成后自动运行测试用例。
- 在项目根目录创建
setup.py(配合pyproject.toml使用setuptools),添加自定义安装逻辑:
from setuptools import setup from setuptools.command.install import install import subprocess class PostInstallTest(install): def run(self): install.run(self) # 调用pytest测试已安装的包 subprocess.run(["pytest", "--pyargs", "your_package_name"], check=True) setup( name="your_package_name", # 其他必要配置(版本、作者等) cmdclass={"install": PostInstallTest}, extras_require={"test": ["pytest"]} )
- 在
pyproject.toml中声明测试依赖,确保安装时能获取到pytest:
[project.optional-dependencies] test = ["pytest>=7.0"]
- 若需触发测试,执行
pip install your_package_name[test],安装完成后会自动运行测试。
方案2:用tox自动化多环境安装测试
tox可以创建独立虚拟环境,完整模拟用户安装流程并执行测试,适合跨版本验证:
- 安装tox:
pip install tox - 在项目根目录创建
tox.ini:
[tox] envlist = py38, py39, py310, py311 skipsdist = true # 依赖scikit-build-core的构建流程,tox直接调用pip安装 [testenv] commands = pip install . # 模拟用户安装 pytest tests/ # 运行测试用例 deps = pytest>=7.0
- 执行
tox,工具会自动在每个Python版本的干净环境中安装包并运行测试。
方案3:CI/CD流水线中模拟真实安装
在GitHub Actions、GitLab CI等流水线中创建干净环境,完全复刻用户安装场景:
以GitHub Actions为例,创建.github/workflows/test-install.yml:
name: 验证安装有效性 on: [push, pull_request] jobs: test-install: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v4 - name: 设置Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: 构建包 run: pip install build && python -m build - name: 从wheel安装包 run: pip install dist/*.whl - name: 运行测试 run: python -m pytest tests/
执行流水线时,会在每个Python版本的干净环境中安装包,测试安装后的功能是否正常。
方案4:改进CMake测试,模拟安装路径
如果偏好通过CMake处理,可模拟site-packages目录,让测试更接近真实安装环境:
在CMakeLists.txt中添加自定义命令:
# 假设你的Python绑定目标为your_python_lib add_custom_command( TARGET your_python_lib POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/test_env/site-packages" COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:your_python_lib>" "${CMAKE_BINARY_DIR}/test_env/site-packages/" COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH="${CMAKE_BINARY_DIR}/test_env/site-packages" ${PYTHON_EXECUTABLE} -m pytest "${CMAKE_SOURCE_DIR}/tests/" COMMENT "运行安装模拟测试" )
该方法将构建后的库复制到模拟的site-packages目录,设置PYTHONPATH后运行测试,能验证导入、资源加载等安装后才会出现的问题。
内容的提问来源于stack exchange,提问作者mqnc
相关产品推荐
相关产品推荐

