macOS 10.13.6下FastAPI项目安装psycopg2报egg_info运行失败
问题根因
psycopg2是基于C实现的Python扩展,默认通过pip安装时会从源码本地编译,编译过程强依赖PostgreSQL客户端自带的pg_config工具,环境中找不到这个工具就会触发你看到的pg_config executable not found报错。- 手动将下载的psycopg2安装包/源码直接拖到
site-packages目录的操作完全无效:Python导入模块需要包完成编译构建、生成对应元信息,未走正规安装流程的文件不会被解释器识别,自然会报No module named 'psycopg2'错误。
可行解决方案
二选一即可,优先推荐方案1用于日常开发场景。
方案1:安装预编译二进制版(零依赖,适合开发环境)
先激活你项目对应的Python 3.10虚拟环境,直接执行以下命令安装预编译好的二进制包,不需要本地安装PostgreSQL编译环境:
pip install psycopg2-binary
安装完成后进入Python交互环境执行import psycopg2,无报错即为安装成功,在FastAPI项目中可以直接调用,接口和源码版psycopg2完全一致。
生产环境如果对性能、依赖兼容性有严格要求,建议使用方案2。
方案2:安装编译依赖后装源码版(适合生产环境)
- 先通过Homebrew安装PostgreSQL客户端工具链,自动补全
pg_config依赖:
brew install postgresql
- 保持虚拟环境激活状态,直接执行源码安装命令:
pip install psycopg2
- 如果执行后仍然提示找不到
pg_config,手动指定pg_config路径再安装即可(Intel芯片Mac的Homebrew安装的PostgreSQL默认pg_config路径如下,M系列芯片把路径开头的/usr/local换成/opt/homebrew):
pip install psycopg2 --global-option=build_ext --global-option="--pg-config=/usr/local/opt/postgresql/bin/pg_config"
额外注意
不要手动往site-packages目录塞包文件,哪怕是下载的whl格式预编译包,也要通过pip install 本地包文件路径的方式安装,否则会出现路径不匹配、架构不兼容、元信息缺失等各种导入问题。
内容的提问来源于stack exchange,提问作者HamzaDevXX
相关产品推荐
相关产品推荐

