如何导入PyBind11编译的.pyd模块?遇ModuleNotFoundError求助
解决Windows 10 Anaconda环境下导入.pyd模块的ModuleNotFoundError问题
验证.pyd文件与环境的兼容性
- 确认Anaconda环境的Python版本与编译.pyd时的版本完全一致:在Jupyter中执行
import sys; print(sys.version),检查是否为3.9.7。小版本不匹配会直接导致模块无法识别。 - 验证架构匹配:执行
import platform; print(platform.architecture()),确认输出为('64bit', 'WindowsPE'),与.pyd文件名中的win_amd64对应。 - 检查文件名拼写:确保.pyd文件名是
calJaccSimm.cp39-win_amd64.pyd,导入语句import calJaccSimm的拼写完全一致(Windows下文件名大小写不敏感,但Python导入可能存在严格匹配情况)。
- 确认Anaconda环境的Python版本与编译.pyd时的版本完全一致:在Jupyter中执行
确认Jupyter的工作路径与模块路径一致
- 打印当前工作目录:
import os; print(os.getcwd()),如果输出不是D:\projects\sem4\code,执行os.chdir(r"D:\projects\sem4\code")切换路径后再尝试导入。 - 检查模块路径是否在sys.path中:执行
import sys; print(sys.path),如果目标路径不在列表中,手动添加:sys.path.append(r"D:\projects\sem4\code")。
- 打印当前工作目录:
排查.pyd文件的依赖缺失
- .pyd本质是DLL文件,可能依赖第三方库或VC++运行时。使用VS开发者命令提示符执行
dumpbin /dependents calJaccSimm.cp39-win_amd64.pyd,查看是否有缺失的DLL。 - 若缺失VC运行库,安装对应版本的Visual C Redistributable(Python 3.9通常适配VS2019 x64版本)。
- .pyd本质是DLL文件,可能依赖第三方库或VC++运行时。使用VS开发者命令提示符执行
排除Jupyter Kernel的环境不匹配问题
- 在Jupyter中执行
import sys; print(sys.executable),确认路径指向Anaconda环境的Python.exe(例如D:\Anaconda3\envs\your_env\python.exe)。 - 若路径不符,激活Anaconda环境后重新安装kernel:
重启Jupyter后选择对应kernel再测试。conda install ipykernel python -m ipykernel install --user --name your_env_name --display-name "Python (your_env_name)"
- 在Jupyter中执行
检查文件权限
- 右键
.pyd文件→属性→安全,确认当前用户拥有读取和执行权限,避免因权限不足导致模块无法加载。
- 右键
重新编译.pyd文件
- 确保编译时使用Anaconda环境的Python头文件与库:激活目标环境后,通过
setup.py重新编译:
这样生成的.pyd会与当前Anaconda环境完全兼容。python setup.py build_ext --inplace
- 确保编译时使用Anaconda环境的Python头文件与库:激活目标环境后,通过
内容的提问来源于stack exchange,提问作者tushaR
相关产品推荐
相关产品推荐

