在macOS Sierra用PyCharm运行fastparquet测试遇_PyClass_Type缺失错误
_PyClass_Type导入错误 这个错误的根源很明确——_PyClass_Type是Python 2.x专属的内部符号,Python 3.x已经彻底移除了它。你遇到的问题说明fastparquet的speedups.so扩展模块是用Python 2环境编译的,哪怕你装了boost-python3,编译过程大概率没正确关联到Python 3的依赖。下面是一步步的解决方法:
确认PyCharm使用的是Python 3解释器
打开PyCharm,进入Preferences > Project: [你的项目名] > Python Interpreter,检查当前选中的解释器是否为Python 3.x版本(macOS Sierra默认自带Python 2.7,很容易被误选)。如果不是,点击齿轮图标添加正确的Python 3解释器(可以是brew安装的或者pyenv管理的版本)。彻底清理并重新编译fastparquet
- 先卸载已安装的fastparquet:
pip uninstall -y fastparquet - 如果是从本地源码编译,先清理之前的编译缓存:
rm -rf /Users/dhaviv/Documents/GitHub/fastparquet/build - 用Python 3的pip重新安装,强制从源码编译(避免使用预编译的二进制包):
pip3 install --no-binary :all: fastparquet - 如果是本地源码编译,手动指定boost-python3的路径(brew安装的boost-python3通常在
/usr/local下):export BOOST_INCLUDEDIR=/usr/local/include/boost/python3 export BOOST_LIBRARYDIR=/usr/local/lib python3 setup.py clean build install
- 先卸载已安装的fastparquet:
验证编译后的模块依赖
用otool检查speedups.so的关联库,确认它指向Python 3:otool -L /Users/dhaviv/Documents/GitHub/fastparquet/fastparquet/speedups.so输出里应该看到类似
/Library/Frameworks/Python.framework/Versions/3.x/Python的路径,而不是Python 2的框架路径。对齐PyCharm和终端的环境变量
有时候PyCharm的环境变量和终端不一致,导致编译时用了错误的Python版本。可以在Run > Edit Configurations里检查Environment variables,确保Python 3的路径排在Python 2之前;或者直接在PyCharm内置终端里执行编译命令,确保使用的是项目关联的Python 3解释器。
内容的提问来源于stack exchange,提问作者Daniel Haviv

