MacOS Python3 venv中fastpbkdf2缺失.so文件引发ModuleNotFound错误
问题:虚拟环境安装fastpbkdf2后缺失编译文件,导致ModuleNotFoundError
问题描述
我在项目中依赖fastpbkdf2库,用python3 -m venv创建虚拟环境后执行pip install fastpbkdf2安装依赖,全程无报错,但运行pytest测试时触发ModuleNotFoundError: No module named 'fastpbkdf2._fastpbkdf2'。
排查后发现,虚拟环境路径.venv/lib/python3.12/site-packages/fastpbkdf2下缺失_fastpbkdf2.abi3.so文件。但全局安装该库,或是在Docker容器内执行相同安装步骤时,这个文件会自动存在。本地手动编译依赖能解决问题,但这不属于正常的安装流程,我不清楚该去哪里提交这个issue,特此提问。
复现步骤
前置条件
- Python 3.12(Python 3.10也可复现此问题)
- MacOS 14.5
- Pip 24.0
操作流程
- 克隆目标项目仓库:
git clone git@github.com:carter-yagemann/python-fuzzy-extractor.git cd python-fuzzy-extractor
- 创建并激活虚拟环境:
python3 -m venv .venv source .venv/bin/activate
- 安装项目依赖:
pip install -r requirements.txt pip install -r requirements.testing.txt
- 运行测试命令:
python3 -m pytest
错误输出
ImportError while importing test module '/path/to/project/tests/fuzzy_extractor_test.py'. Hint: make sure your test modules/packages have valid Python names. Traceback: /usr/local/Cellar/python@3.12/3.12.3/Frameworks/Python.framework/Versions/3.12/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) tests/fuzzy_extractor_test.py:26: in <module> from fuzzy_extractor import FuzzyExtractor fuzzy_extractor/__init__.py:35: in <module> from fastpbkdf2 import pbkdf2_hmac .venv/lib/python3.12/site-packages/fastpbkdf2/__init__.py:7: in <module> from fastpbkdf2._fastpbkdf2 import ffi, lib E ModuleNotFoundError: No module named 'fastpbkdf2._fastpbkdf2'
执行ls .venv/lib/python3.12/site-packages/fastpbkdf2可确认.so文件缺失;但在Docker环境下执行相同步骤,_fastpbkdf2.abi3.so文件正常存在。
临时解决办法
激活虚拟环境后,手动克隆fastpbkdf2仓库并编译安装:
git clone https://github.com/Ayrx/python-fastpbkdf2.git cd python-fastpbkdf2 python3 setup.py build_ext --inplace python3 setup.py install
Issue提交建议
这个问题属于fastpbkdf2包的发布问题(PyPI上的预编译包可能未包含适配MacOS 14.5的二进制文件),应该直接到fastpbkdf2的官方GitHub仓库提交issue。提交时需要明确说明你的环境信息(MacOS版本、Python版本、Pip版本)、完整的复现步骤,以及虚拟环境与全局/Docker环境的现象对比。
内容的提问来源于stack exchange,提问作者violog
相关产品推荐
相关产品推荐

