Python wheel安装成功却无法导入模块:pyd文件是否需单独移动配置
核心结论
你遇到的ModuleNotFoundError: No module named 'myFunction',本质原因是生成的wheel包在打包环节遗漏了核心模块文件myFunction.pyd,并非安装完成后需要手动移动pyd的位置——你当前在site-packages路径下仅能看到myFunction-1.0.dist-info元数据目录,恰恰说明实际的扩展模块文件根本没有被部署到Python的可搜索路径下。
排查与修复步骤
- 第一步:验证wheel包的内部构成
在存放wheel安装包的目录下执行命令:wheel unpack myFunction-1.0-py3-none-any.whl
查看解压生成的目录内容,如果找不到myFunction.pyd,即可100%确认是打包流程遗漏了二进制扩展文件,而非安装环节出现问题。 - 第二步:掌握pyd文件的正确打包规则(无需安装后手动迁移文件)
setuptools默认在打wheel包时,只会识别纯Python的.py源文件,不会自动收集.pyd这类Windows平台的二进制扩展文件,常见的打包错误场景包括:- 没有将pyd文件放在项目结构的对应位置
- 没有在打包配置中显式声明需要包含的pyd类二进制文件
对于需要通过import myFunction直接导入的单pyd模块,正确的项目结构参考:
同时需要在打包配置中显式声明这个独立模块,否则setuptools不会将其纳入安装列表,以pyproject.toml的setuptools配置为例:项目根目录/ ├─ myFunction.pyd # 与打包配置文件平级放置 ├─ pyproject.toml / setup.py └─ README.md[tool.setuptools] py-modules = ["myFunction"] # 对应根目录下的myFunction.pyd文件 - 第三步:临时验证方案
如果你暂时不想重新生成wheel包,可直接将原有的myFunction.pyd手动复制到C:\Program Files\Python38\Lib\site-packages路径下,重新打开命令行执行导入命令。如果此时可以正常导入,即可确认是打包遗漏文件的问题,后续修正打包配置后重新生成wheel即可永久解决问题。
特别注意:pyd文件名必须和要导入的模块名完全严格一致,如果你要导入的是
myFunction,pyd文件绝对不能命名为myfunction.pyd、myFunction_1.0.pyd这类带前后缀、修改大小写的格式,否则就算文件放在正确路径下,也无法被Python的导入机制识别。
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

