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

从setup.py迁移到pyproject.toml后Python C扩展无法导入

问题解决指南

核心问题:模块命名与导入路径不匹配

你在pyproject.toml中定义的扩展模块名为mylib.spam,这意味着它是mylib包下的子模块,而非顶级模块spam。直接执行import spam自然找不到模块,正确的导入方式是import mylib.spam。

完整修复步骤

1. 完善包结构

在src/mylib目录下创建空的__init__.py文件,让Python识别mylib为合法包:

touch src/mylib/__init__.py

2. 验证导入

安装开发版后,执行以下命令测试:

import mylib.spam
# 调用模块内的函数,例如 spam.system("echo hello")

(可选)恢复顶级模块spam的导入方式

如果希望保持原来直接import spam的习惯,可修改pyproject.toml配置,移除包层级:

#pyproject.toml
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[project]
name = "mylib-spam"
version="0.42"

[tool.setuptools]
ext-modules = [
  {name = "spam", sources = ["src/spammodule.c"]}
]

同时删除src/mylib目录,编译后的模块会直接作为顶级模块安装,即可用import spam导入。

补充说明

编译时出现的No such file or directory错误,是因为setuptools尝试将编译好的扩展复制到src/mylib目录但该目录不存在,手动创建目录的操作是正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 06:33:09