MacOS 使用ssh2-python报错ImportError: dlopen ... Library not loaded

环境

  • Apple M3 Pro
  • MacOS 14.1
  • Python 3.9
  • ssh2-python==0.26.0

报错信息

  File "/Users/skyler/Documents/py-env/venv3.9/lib/python3.9/site-packages/pssh/clients/__init__.py", line 19, in <module>
    from .native.parallel import ParallelSSHClient
  File "/Users/skyler/Documents/py-env/venv3.9/lib/python3.9/site-packages/pssh/clients/native/__init__.py", line 19, in <module>
    from .parallel import ParallelSSHClient
  File "/Users/skyler/Documents/py-env/venv3.9/lib/python3.9/site-packages/pssh/clients/native/parallel.py", line 20, in <module>
    from .single import SSHClient
  File "/Users/skyler/Documents/py-env/venv3.9/lib/python3.9/site-packages/pssh/clients/native/single.py", line 24, in <module>
    from ssh2.error_codes import LIBSSH2_ERROR_EAGAIN
ImportError: dlopen(/Users/skyler/Documents/py-env/venv3.9/lib/python3.9/site-packages/ssh2/error_codes.cpython-39-darwin.so, 0x0002): Library not loaded: /private/var/folders/90/2z2_gp3s4z737mq6fyxsw6g80000gn/T/pip-install-1gzz284h/ssh2-python/src/src/libssh2.1.dylib
  Referenced from: <F8048C8C-1214-3A6C-A790-0DEAB6514422> /Users/skyler/Documents/py-env/venv3.9/lib/python3.9/site-packages/ssh2/error_codes.cpython-39-darwin.so
  Reason: tried: '/private/var/folders/90/2z2_gp3s4z737mq6fyxsw6g80000gn/T/pip-install-1gzz284h/ssh2-python/src/src/libssh2.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/private/var/folders/90/2z2_gp3s4z737mq6fyxsw6g80000gn/T/pip-install-1gzz284h/ssh2-python/src/src/libssh2.1.dylib' (no such file), '/private/var/folders/90/2z2_gp3s4z737mq6fyxsw6g80000gn/T/pip-install-1gzz284h/ssh2-python/src/src/libssh2.1.dylib' (no such file)

解决方式

brew install libssh2
  
export DYLD_LIBRARY_PATH="$(brew --prefix libssh2)/lib:${DYLD_LIBRARY_PATH}"

安装完依赖的lib后,服务正常运行。

<think>好的,我现在需要处理用户关于在Mac下运行Python脚本时遇到的导入错误。用户尝试导入pcbnew时,出现了ImportError,提示找不到libwx_osx_cocoau_gl-3.2.0.dylib库。首先,我得分析这个错误的原因。 从错误信息来看,问题出在动态链接库无法加载。具体来说,_pcbnew.so试图引用@rpath下的libwx_osx_cocoau_gl-3.2.0.dylib,但系统在多个路径下都找不到这个文件。用户可能没有正确安装wxWidgets库,或者KiCad的安装路径没有被正确识别,导致动态库的路径没有包含在运行时搜索路径中。 接下来,我需要考虑常见的解决方法。首先,检查KiCad的安装是否正确,特别是相关的依赖库是否完整。可能用户安装的KiCad版本有问题,或者安装过程中某些组件没有被正确配置。其次,检查环境变量,比如DYLD_LIBRARY_PATH是否包含了KiCad的库路径,这会影响动态链接器查找库的位置。另外,可能需要重新链接库文件,使用install_name_tool来修正库的路径,或者通过符号链接将库文件链接到系统能够找到的位置。 用户提到错误中提到的路径包括/Library/Frameworks/Python.framework/Versions/3.6/...,但用户可能使用的是Python 3.9,这可能导致路径不匹配。这提示用户可能在使用系统自带的Python或者另一个版本的Python,而KiCad可能需要特定版本的Python环境。这时候,建议用户检查Python版本是否与KiCad兼容,或者使用虚拟环境来隔离环境。 另外,wxPython是另一个可能的依赖项,用户是否安装了正确版本的wxPython?如果KiCad依赖于特定版本的wxWidgets,而用户系统上没有安装,或者版本不兼容,就会导致这个问题。需要确认KiCad的文档中提到的依赖版本,并确保系统上安装了对应的版本。 可能还需要检查KiCad的安装路径,确保其Frameworks目录下的库文件确实存在,并且权限正确。如果库文件被移动或删除,也会导致这个问题。此外,用户是否有权限访问这些库文件?可能需要使用chmod修改权限。 最后,如果以上方法都无效,可能需要重新安装KiCad,或者通过Homebrew等包管理器安装,确保依赖项被正确安装和管理。另外,查看KiCad的官方文档或社区支持,是否有针对Mac用户的特别说明或已知问题。 总结起来,可能的解决步骤包括:确认KiCad安装完整性,检查并设置DYLD_LIBRARY_PATH,修正库路径,安装缺失的依赖使用正确的Python环境,以及重新安装KiCad。需要逐步引导用户尝试这些方法,并提供具体的命令和操作示例,方便用户执行。</think>针对 macOS 下运行 KiCad Python 脚本时出现的 `libwx_osx_cocoau_gl-3.2.0.dylib` 依赖缺失问题,以下是分步解决方案: --- ### **一、问题根源分析** 错误提示表明 `_pcbnew.so` 依赖的 `wxWidgets` 图形库未正确加载,主要原因可能是: 1. KiCad 自带的 `wxWidgets` 库路径未加入系统搜索范围 2. 系统存在多个 Python 环境导致路径冲突 3. 依赖库的符号链接未正确建立 --- ### **二、解决方案** #### **方法 1:添加 KiCad 库路径到环境变量** ```bash # 临时生效(仅当前终端会话) export DYLD_LIBRARY_PATH="/Applications/KiCad/KiCad.app/Contents/Frameworks:$DYLD_LIBRARY_PATH" # 永久生效(添加到 zsh/bash 配置文件) echo 'export DYLD_LIBRARY_PATH="/Applications/KiCad/KiCad.app/Contents/Frameworks:$DYLD_LIBRARY_PATH"' >> ~/.zshrc source ~/.zshrc ``` #### **方法 2:修正动态库链接路径** ```bash # 检查 _pcbnew.so 的依赖项 otool -L /Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.9/site-packages/_pcbnew.so # 使用 install_name_tool 修正路径(需管理员权限) sudo install_name_tool -change @rpath/libwx_osx_cocoau_gl-3.2.0.dylib /Applications/KiCad/KiCad.app/Contents/Frameworks/libwx_osx_cocoau_gl-3.2.0.dylib /Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.9/site-packages/_pcbnew.so ``` #### **方法 3:创建符号链接(推荐)** ```bash # 创建目标目录 sudo mkdir -p /usr/local/lib # 建立符号链接 sudo ln -s /Applications/KiCad/KiCad.app/Contents/Frameworks/libwx_* /usr/local/lib/ ``` --- ### **三、环境验证** 1. **检查依赖是否生效**: ```bash python3 -c "import pcbnew; print(pcbnew.__file__)" ``` 2. **运行测试脚本**: ```python # test_pcbnew.py import pcbnew board = pcbnew.GetBoard() print("KiCad Python 绑定加载成功!") ``` ```bash python3 test_pcbnew.py ``` --- ### **四、常见问题补充** 1. **多版本 Python 冲突**: ```bash # 确认使用 KiCad 自带的 Python /Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/Current/bin/python3 your_script.py ``` 2. **签名问题(macOS 安全限制)**: ```bash # 临时解除 Gatekeeper 限制 sudo xattr -rd com.apple.quarantine /Applications/KiCad/KiCad.app ``` 3. **重装依赖(终极方案)**: ```bash # 通过 Homebrew 安装完整依赖 brew install --cask kicad brew install wxpython ``` --- ### **五、结果预期** 完成上述任一方法后,应能看到以下成功提示: ```bash KiCad Python 绑定加载成功! ``` 若仍报错,请提供以下信息以便进一步排查: 1. `KiCad.app` 的完整安装路径 2. 执行 `python3 --version` 的输出 3. 终端执行 `echo $DYLD_LIBRARY_PATH` 的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值