Mac Silicon安装psychopy包时出现Cython相关错误
问题描述
我尝试使用PsychoPy包(版本2023.2.3),安装过程中会附带安装部分Psychtoolbox文件。在Mac Silicon环境下遇到两类问题:
1. Python 3.9/3.10环境导入Psychtoolbox报错
执行import psychtoolbox as ptb时出现以下错误:
ImportError Traceback (most recent call last) Cell In[57], line 1 ----> 1 import psychtoolbox as ptb File ~/miniforge3/envs/goodfeeling/lib/python3.10/site-packages/psychtoolbox/__init__.py:28 26 from .WaitSecs import WaitSecs 27 from .GetSecs import GetSecs ---> 28 from .PsychHID import PsychHID 29 from .IOPort import IOPort 30 if is_64bits: ImportError: dlopen(/Users/davidcsuka/miniforge3/envs/myenv/lib/python3.10/site-packages/psychtoolbox/PsychHID.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace '_AllocateHIDObjectFromIOHIDDeviceRef'
2. Python 3.8环境安装PsychoPy失败
使用pip安装时直接失败,错误信息如下:
File "/private/var/folders/9x/x950xm6j3ws6cm5rcv8w34kh0000gn/T/pip-build-env-a0oj0w5k/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 295, in _get_build_requires self.run_setup() File "/private/var/folders/9x/x950xm6j3ws6cm5rcv8w34kh0000gn/T/pip-build-env-a0oj0w5k/overlay/lib/python3.8/site-packages/setuptools/build_meta.py", line 311, in run_setup exec(code, locals()) File "<string>", line 928, in <module> File "<string>", line 923, in get_cython_extfiles File "/private/var/folders/9x/x950xm6j3ws6cm5rcv8w34kh0000gn/T/pip-build-env-a0oj0w5k/overlay/lib/python3.8/site-packages/Cython/Build/Dependencies.py", line 1154, in cythonize cythonize_one(*args) File "/private/var/folders/9x/x950xm6j3ws6cm5rcv8w34kh0000gn/T/pip-build-env-a0oj0w5k/overlay/lib/python3.8/site-packages/Cython/Build/Dependencies.py", line 1321, in cythonize_one raise CompileError(None, pyx_file) Cython.Compiler.Errors.CompileError: tables/utilsextension.pyx
疑问:是否需要更换Cython版本?或是不同C编译器存在兼容性问题?亦或是该问题与我的操作系统相关?
解决方案
针对Python 3.9/3.10的Psychtoolbox导入错误
该错误根源是Mac Silicon(ARM架构)的兼容性问题:_AllocateHIDObjectFromIOHIDDeviceRef属于旧版IOHID框架符号,新版macOS ARM架构已移除,而pip提供的预编译Psychtoolbox包基于x86架构编译,未适配ARM。
解决方式:
- 优先使用PsychoPy官方提供的Mac Silicon专属安装包,官方包会适配ARM架构的所有依赖,包括正确编译的Psychtoolbox版本。
- 若必须使用pip,需手动从源码编译Psychtoolbox:
- 安装Xcode Command Line Tools:
xcode-select --install - 卸载现有Psychtoolbox:
pip uninstall psychtoolbox - 源码编译安装:
pip install git+https://github.com/Psychtoolbox-3/Psychtoolbox-3.git#subdirectory=Psychtoolbox/Python/Psychtoolbox
- 安装Xcode Command Line Tools:
针对Python 3.8的安装失败问题
此错误由Cython版本不兼容导致,Python 3.8搭配的新版Cython对旧版tables包的.pyx文件编译支持不足。
解决方式:
- 指定兼容的Cython版本,先安装旧版Cython再安装PsychoPy:
pip install cython==0.29.36 pip install psychopy==2023.2.3 - 确保已安装Xcode Command Line Tools,且环境变量
CC指向系统默认的clang编译器,避免使用第三方编译器。
总结
- Mac Silicon操作系统是核心影响因素,ARM架构的预编译依赖包适配不足;
- Cython版本不兼容是Python 3.8安装失败的直接原因;
- 优先选择官方ARM专属安装包,其次考虑源码编译或指定依赖版本的方案。
内容的提问来源于stack exchange,提问作者dcsuka
相关产品推荐
相关产品推荐

