Python 踩坑记录
Mac M 系列芯片安装 libopus 报平台不兼容
- Mac M4 芯片
- 使用 conda 管理环境
通过 requirement.txt 安装,但是报错了
OSError: dlopen(/Users/xx/miniforge3/envs/your-project/bin/../lib/libopus.dylib, 0x0006): tried: '/Users/xx/miniforge3/envs/your-project/bin/../lib/libopus.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/xx/miniforge3/envs/your-project/bin/../lib/libopus.dylib' (no such file), '/Users/xx/miniforge3/envs/your-project/bin/../lib/libopus.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/Users/xx/miniforge3/envs/your-project/lib/libopus.0.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/xx/miniforge3/envs/your-project/lib/libopus.0.dylib' (no such file), '/Users/xx/miniforge3/envs/your-project/lib/libopus.0.dylib' (mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e' or 'arm64'))
解决方案
- 安装系统 opus 库
brew install opus- 重新创建干净的 ARM 环境
conda env remove -n your-project -y
conda create -n your-project python=3.10 -y
conda activate your-project- 使用 pip 安装 opuslib
pip install opuslib==3.0.1- 设置正确的库路径
export DYLD_LIBRARY_PATH=/opt/homebrew/Cellar/opus/1.5.2/lib:$DYLD_LIBRARY_PATH确保每次 opuslib 都能正常工作
在激活 your-project 环境后,需要设置环境变量:
conda activate your-project
export DYLD_LIBRARY_PATH=/opt/homebrew/Cellar/opus/1.5.2/
lib:$DYLD_LIBRARY_PATH或者可以将这个环境变量添加到 conda 环境的激活脚本中,这样每次激活环境时会自动设置。
为指定环境设置激活脚本
conda activate your-project- 检查 conda 环境的路径,然后创建激活脚本目录。
echo $CONDA_PREFIX- 创建 conda 环境的激活脚本目录结构。
mkdir -p $CONDA_PREFIX/etc/conda/activate.d- 创建激活脚本文件,设置 opus 库路径。
cat > $CONDA_PREFIX/etc/conda/activate.d/opus_env.sh << 'EOF'
#!/bin/bash
# Set DYLD_LIBRARY_PATH for opus library
export DYLD_LIBRARY_PATH="/opt/homebrew/Cellar/opus/1.5.2/lib:$DYLD_LIBRARY_PATH"
echo "Opus library path set for opuslib"
EOF- 给激活脚本添加执行权限。
chmod +x $CONDA_PREFIX/etc/conda/activate.d/opus_env.sh- 测试激活脚本是否正常工作,重新激活环境
conda deactivate && conda activate your-project
python -c "import opuslib; print('Opus import successful! Environment variable automatically set.')"