Skip to content

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'))

解决方案

  1. 安装系统 opus 库
bash
brew install opus
  1. 重新创建干净的 ARM 环境
bash
conda env remove -n your-project -y
conda create -n your-project python=3.10 -y
conda activate your-project
  1. 使用 pip 安装 opuslib
bash
pip install opuslib==3.0.1
  1. 设置正确的库路径
bash
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 环境的激活脚本中,这样每次激活环境时会自动设置。

为指定环境设置激活脚本

bash
conda activate your-project
  1. 检查 conda 环境的路径,然后创建激活脚本目录。
bash
echo $CONDA_PREFIX
  1. 创建 conda 环境的激活脚本目录结构。
bash
mkdir -p $CONDA_PREFIX/etc/conda/activate.d
  1. 创建激活脚本文件,设置 opus 库路径。
bash
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
  1. 给激活脚本添加执行权限。
bash
chmod +x $CONDA_PREFIX/etc/conda/activate.d/opus_env.sh
  1. 测试激活脚本是否正常工作,重新激活环境
bash
conda deactivate && conda activate your-project

python -c "import opuslib; print('Opus import successful! Environment variable automatically set.')"

非商业用途,允许转载,需注明出处