MacOS 使用ssh2-python报错ImportError: dlopen ... _libssh2_channel_direct_tcpip_ex
环境
- Apple M3 Pro
- MacOS 14.1
- Python 3.9
- parallel-ssh==2.14.0
- ssh2-python==1.1.2.post1
报错信息
File "./manager.py", line 16, in <module>from pssh.clients import ParallelSSHClientFile ".env/lib/python3.9/site-packages/pssh/clients/__init__.py", line 19, in <module>from .native import ParallelSSHClient, SSHClientFile ".env/lib/python3.9/site-packages/pssh/clients/native/__init__.py", line 19, in <module>from .parallel import ParallelSSHClientFile ".env/lib/python3.9/site-packages/pssh/clients/native/parallel.py", line 20, in <module>from .single import SSHClientFile ".env/lib/python3.9/site-packages/pssh/clients/native/single.py", line 30, in <module>from ssh2.session import Session, LIBSSH2_SESSION_BLOCK_INBOUND, LIBSSH2_SESSION_BLOCK_OUTBOUND
ImportError: dlopen(.env/lib/python3.9/site-packages/ssh2/session.cpython-39-darwin.so, 0x0002): symbol not found in flat namespace '_libssh2_channel_direct_tcpip_ex'
解决方式
alias ibrew='arch -x86_64 /usr/local/bin/brew' # X86 Homebrew
ibrew install libssh2 # 本次安装的最新版本 stable 1.11.0
export LIBSSH2_DIR=$(ibrew --prefix libssh2)
export LDFLAGS="-L$LIBSSH2_DIR/lib"
export CFLAGS="-I$LIBSSH2_DIR/include"pip uninstall -y pssh ssh2-python
pip install parallel-ssh==2.14.0 ssh2-python==1.1.2.post1 --no-cache-dir
安装完依赖的lib后,服务正常运行。
otool -L .env/lib/python3.9/site-packages/ssh2/session.cpython-39-darwin.so.env/lib/python3.9/site-packages/ssh2/session.cpython-39-darwin.so:/usr/local/opt/libssh2/lib/libssh2.1.dylib (compatibility version 2.0.0, current version 2.1.0)/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.100.3)
或者
python -c "from ssh2.session import Session; print('Success')"