как изменить версию Python, используемую plpython на Mac OSX? - PullRequest
2 голосов
/ 07 мая 2011

Я установил 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<br> /Library/PostgreSQL/9.0/lib/postgresql/plpython2.so:<br> /System/Library/Frameworks/Python.framework/Versions/2.5/Python (compatibility version 2.5.0, current version 2.5.1)<br> /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

как я могу изменить это с Python 2.5 на Python2.6?

С уважением,

ssc

Ответы [ 2 ]

3 голосов
/ 07 мая 2011

Вам необходимо восстановить из исходного кода.Нет никакого способа изменить его в двоичном распределении.

Когда вы запускаете configure, задайте для переменной среды PYTHON полный путь к двоичному файлу python, который вы хотите использовать, например

./configure --other-stuff ... PYTHON=/usr/bin/python2.6

Возможно, вы можете попытаться заставить людей EnterpriseDB обновить свои процедуры сборки.Не уверен, по каким критериям они выбирают версию Python.В качестве альтернативы возможно установка из MacPorts.

1 голос
/ 08 мая 2011

Я должен опубликовать это как комментарий к ответу Питера Айзентраута, но я продолжаю нажимать ввод и затем случайно отправлять сообщение до того, как комментарий будет закончен; Кроме того, я хочу добавить некоторые ссылки и другие вещи:

Я закончил тем, что сделал именно то, что рекомендовал Питер - и перекомпилировал из источника, и опубликовал эту проблему на форуме 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

хммм, может быть, это должно войти в вики ...

...