Python下dll、pyd搜索路径的问题

引子

最近在用C++使用pybind11生成pyd以供python调用,并且使用opencv的dll,在测试过程中经常无法找到对应的文件。

pyd搜索路径

会在当前工作目录和PYTHONPATH环境变量中搜索,也可以通过sys.path.append()临时添加变量:

sys.path.append('/path_to_pyd/')

备注:通过sys.path.append()临时添加变量会导致pycharm中标注报错,但是能够正常运行。
在pycharm中可以在 设置 > 项目 > Python解释器 在下拉菜单中选择全部显示,选择使用的解释器并选择目录样式图标,将当前项目目录外(项目目录内的疑似不生效)的pyd路径添加进来即可,在项目目录里的外部库就可以看到添加的路径了,此时pyd可以被正确解析,并且不需要使用sys.path.append()

dll搜索路径

若python调用的pyd中调用了dll,若dll不在搜索路径中会产生如下报错:

ImportError: DLL load failed while importing xxx_module: 找不到指定的模块。

在所有python版本中,都会在包含pyd文件的目录中搜索dll,因此将dll复制到pyd所在文件即可。但我们也可以采用如下方法添加搜索路径。
在python3.8以下的版本中,使用使用环境变量PATH和来搜索,因此将dll路径添加到环境变量PATH即可,可以直接向系统添加PATH环境变量,或者也可以在程序中临时添加环境变量:

os.environ['path'] += '/path_to_dll/;'

在python3.8及以上版本中,不再使用使用环境变量PATH来搜索,需要使用os.add_dll_directory(path)来添加dll搜索目录,关于此更新的说明可以查看这里。需要注意,os.add_dll_directory的参数path仅支持绝对路径,且调用结束时失效。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇