PostgreSQL安装PL/Python时遇到的编译错误求助
解决pgenv环境下PL/Python编译安装错误方案
问题1:单独编译contrib PL/Python源码时找不到Makefile依赖文件
执行make和make install时出现以下错误:
Makefile:5: ../../../src/Makefile.global: No such file or directory Makefile:103: /src/Makefile.shlib: No such file or directory make: *** No rule to make target `/src/Makefile.shlib'. Stop. Makefile:5: ../../../src/Makefile.global: No such file or directory Makefile:103: /src/Makefile.shlib: No such file or directory make: *** No rule to make target `/src/Makefile.shlib'. Stop.
解决步骤:
- 不要单独下载contrib仓库的PL/Python源码,必须使用与已安装PostgreSQL版本完全匹配的完整源码包,PL/Python编译依赖主源码中的配置文件。
- 进入完整源码包内的
contrib/plpython目录,执行带USE_PGXS参数的编译命令:
该参数会通过make USE_PGXS=1pg_config自动定位已安装PostgreSQL的配置,避免路径依赖问题。 - 执行安装命令:
make install USE_PGXS=1
问题2:pgenv编译PostgreSQL 13.4时提示'eval.h'文件缺失
添加--with-python配置后执行pgenv install 13.4,出现以下错误:
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 command.o common.o copy.o crosstabview.o describe.o help.o input.o large_obj.o mainloop.o prompt.o psqlscanslash.o sql_help.o startup.o stringutils.o tab-complete.o variables.o -L../../../src/port -L../../../src/common -L../../../src/fe_utils -lpgfeutils -L../../../src/common -lpgcommon -L../../../src/port -lpgport -L../../../src/interfaces/libpq -lpq -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -Wl,-dead_strip_dylibs -lpgcommon -lpgport -lz -lreadline -lm -o psql /Applications/Xcode.app/Contents/Developer/usr/bin/make -C pl all /Applications/Xcode.app/Contents/Developer/usr/bin/make -C plpgsql all /Applications/Xcode.app/Contents/Developer/usr/bin/make -C plpython all /Applications/Xcode.app/Contents/Developer/usr/bin/make -C src all gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11 -I../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o plpy_cursorobject.o plpy_cursorobject.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11 -I../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o plpy_elog.o plpy_elog.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I../../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o pl_comp.o pl_comp.c In file included from plpy_cursorobject.c:14: In file included from In file included from plpy_elog.c./plpy_cursorobject.h::108: : In file included from In file included from ./plpy_elog.h./plpy_typeio.h::810: : ./plpython.h:98:./plpython.h:98:1010:: fatal error: fatal error: 'eval.h' file not found'eval.h' file not found #include <eval.h>#include <eval.h> ^~~~~~~~ ^~~~~~~~ 1 error generated. make[3]: *** [plpy_elog.o] Error 1 make[3]: *** Waiting for unfinished jobs.... gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I../../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o pl_exec.o pl_exec.c 1 error generated. make[3]: *** [plpy_cursorobject.o] Error 1 make[2]: *** [all-plpython-recurse] Error 2 make[2]: *** Waiting for unfinished jobs.... gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I../../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o pl_funcs.o pl_funcs.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I../../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o pl_gram.o pl_gram.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I../../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o pl_handler.o pl_handler.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -I. -I. -I../../../../src/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -c -o pl_scanner.o pl_scanner.c gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -Wno-unused-command-line-argument -O2 -bundle -multiply_defined suppress -o plpgsql.so pl_comp.o pl_exec.o pl_funcs.o pl_gram.o pl_handler.o pl_scanner.o -L../../../../src/port -L../../../../src/common -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -Wl,-dead_strip_dylibs -bundle_loader ../../../../src/backend/postgres make[1]: *** [all-pl-recurse] Error 2 make: *** [world-src-recurse] Error 2
解决步骤:
错误原因是Python 3.11移除了eval.h头文件,而PostgreSQL 13.4的PL/Python代码未适配该变化,提供三种解决方案:
方案1:降级Python版本
安装Python 3.10或更低版本,编译时指定该Python路径:PYTHON=/path/to/python3.10 pgenv install 13.4方案2:修改PostgreSQL源码兼容Python 3.11
找到pgenv下载的PostgreSQL 13.4源码包中的src/pl/plpython/plpython.h文件,将#include <eval.h>替换为#include <Python.h>,保存后重新执行pgenv install 13.4。方案3:升级PostgreSQL版本
PostgreSQL 14.5及以上版本已修复与Python 3.11的兼容性问题,直接使用以下步骤安装:- 确保
.pgenv/config/default.conf中配置PGENV_CONFIGURE_OPTIONS=(--with-python) - 执行
pgenv install 14.5(或更高兼容版本)
- 确保
内容的提问来源于stack exchange,提问作者Ishaan Adarsh
相关产品推荐
相关产品推荐

