Как изменить версию Python, используемую plpython на Mac OSX?
Я установил PostgreSQL 9.0.4 на Mac OSX 10.6 с помощью установщика из EnterpriseDB и заметил, что хранимые процедуры, реализованные в plpython, используют python 2.5. Взгляд в библиотеку plpython, кажется, подтверждает, что (otool вроде делает на mac то, что ldd делает на linux):
host:~ user$ otool -L /Library/PostgreSQL/9.0/lib/postgresql/plpython2.so
/Library/PostgreSQL/9.0/lib/postgresql/plpython2.so:
/System/Library/Frameworks/Python.framework/Versions/2.5/Python (compatibility version 2.5.0, current version 2.5.1)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
как я могу изменить это с Python 2.5 на Python 2.6?
С уважением,
ССК
2 ответа
Вам нужно восстановить из источника. Нет способа изменить его в бинарном выпуске.
Когда ты бежишь configure
установите переменную среды PYTHON
на полный путь python
двоичный файл, который вы хотите использовать, например,
./configure --other-stuff ... PYTHON=/usr/bin/python2.6
Я полагаю, вы могли бы попытаться заставить людей EnterpriseDB обновить свои процедуры сборки. Не уверен, по каким критериям они выбирают версию Python. В качестве альтернативы, возможно, установить из MacPorts.
Я должен опубликовать это как комментарий к ответу Питера Айзентраута, но я продолжаю нажимать ввод и затем случайно отправлять сообщение до того, как комментарий будет закончен; Кроме того, я хочу добавить некоторые ссылки и другие вещи:
Я закончил тем, что сделал именно то, что рекомендовал Питер - и перестроил из исходного кода, и разместил эту проблему на форуме EnterpriseDB. По какой-то причине мое сообщение на форуме появилось под каким-то именем пользователя, которого я никогда раньше не слышал, я даже мог прочитать все сообщения этого пользователя. Может быть, он / она вошел в систему до меня, мне кажется, это довольно серьезная ошибка в их программном обеспечении на форуме:-(
В любом случае, сборка бинарного файла plpython включает в себя только загрузку последнего исходного кода PostgreSQL, его распаковку и передачу некоторых параметров configure
как задокументировано:
configure --with-python PYTHON=/usr/bin/python2.6
Затем беги make
строить. Несмотря на то, что версия Python по умолчанию в моей системе - 2.6, и я явно передаю это как параметр, configure выводит это сообщение
checking for python... /usr/bin/python2.6
checking for Python distutils module... yes
checking Python configuration directory... /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/config
checking how to link an embedded Python application... -L/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/config -lpython2.6 -ldl
checking whether Python is compiled with thread support... yes
но встроенный двоичный файл в любом случае использует установку Python 2.7, которую я даже не помню, я установил:
otool -L <postgres build dir>/src/pl/plpython/plpython2.so
<postgres build dir>/src/pl/plpython/plpython2.so:
/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.10)
Это достаточно хорошо для меня, все, что мне нужно, это более свежая версия 2.5. Все еще странно.
Существующий двоичный файл plpython (использующий Python 2.5) находится в каталоге установки EnterpriseDB по умолчанию по адресу /Library/PostgreSQL/9.0/lib/postgresql/plpython2.so
с символической ссылкой plpython.so
к нему в той же папке. Я предпочитаю сохранить оригинал только для того, чтобы быть на безопасной стороне, и вместо символической ссылки сделать новую ссылку:
sudo mv plpython2.so plpython25.so
sudo cp <postgres build dir>/src/pl/plpython/plpython2.so plpython27.so
sudo ln plpython27.so plpython2.so
хм, может быть, это должно войти в вики...