2014-03-24 29 views
1

我試圖在CentOS 6.5上安裝PostgreSQL extension Multicorn。但我所遇到的問題是,CentOS上的默認python版本是2.6,而Multicorn需要2.7或3.3。我試圖用this tutorial編譯Multicorn,但它是一個有點過時,並在那裏Python版本變更步驟不工作了:如何更改生成文件中的python版本 - 編譯Multicorn(PostgreSQL FDW擴展)

sed -i 's/^PYEXEC = python$/PYEXEC = python2.7/' Makefile 

有人可以幫助我再次作出上述命令的工作,或顯示我如何編輯makefile來改變python的版本?我可以在命令行中用python2.7調用python 2.7版。版本2.6只用python調用 - 顯然,如果不打破CentOS,我無法改變這一點。

這是生成文件:

MODULE_big = multicorn 
OBJS   = src/errors.o src/python.o src/query.o src/multicorn.o 


DATA   = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql)) 

DOCS   = $(wildcard doc/*.md) 

EXTENSION = multicorn 
EXTVERSION = $(shell grep default_version $(EXTENSION).control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/") 

all: preflight-check sql/$(EXTENSION)--$(EXTVERSION).sql 

install: python_code 

sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql 
    cp $< [email protected] 

preflight-check: 
    ./preflight-check.sh 


python_code: setup.py 
    cp ./setup.py ./setup--$(EXTVERSION).py 
    sed -i -e "s/__VERSION__/$(EXTVERSION)-dev/g" ./setup--$(EXTVERSION).py 
    $(PYTHON) ./setup--$(EXTVERSION).py install 
    rm ./setup--$(EXTVERSION).py 

release-zip: all 
    git archive --format zip --prefix=multicorn-$(EXTVERSION)/ --output ./multicorn-$(EXTVERSION).zip HEAD 
    unzip ./multicorn-$(EXTVERSION).zip 
    rm ./multicorn-$(EXTVERSION).zip 
    sed -i -e "s/__VERSION__/$(EXTVERSION)/g" ./multicorn-$(EXTVERSION)/META.json ./multicorn-$(EXTVERSION)/setup.py ./multicorn-$(EXTVERSION)/python/multicorn/__init__.py 
    zip -r ./multicorn-$(EXTVERSION).zip ./multicorn-$(EXTVERSION)/ 
    rm ./multicorn-$(EXTVERSION) -rf 

coverage: 
    lcov -d . -c -o lcov.info 
    genhtml --show-details --legend --output-directory=coverage --title=PostgreSQL --num-spaces=4 --prefix=./src/ `find . -name lcov.info -print` 

DATA = sql/$(EXTENSION)--$(EXTVERSION).sql 
EXTRA_CLEAN = sql/$(EXTENSION)--$(EXTVERSION).sql ./multicorn-$(EXTVERSION).zip 
PG_CONFIG ?= pg_config 
PGXS := $(shell $(PG_CONFIG) --pgxs) 
REGRESS  = virtual_tests 

include $(PGXS) 

with_python_no_override = no 

ifeq ($(with_python),yes) 
    with_python_no_override = yes 
endif 

ifdef PYTHON_OVERRIDE 
    with_python_no_override = no 
endif 


ifeq ($(with_python_no_override),yes) 
    SHLIB_LINK = $(python_libspec) $(python_additional_libs) $(filter -lintl,$(LIBS)) 
    override CPPFLAGS := -I. -I$(srcdir) $(python_includespec) $(CPPFLAGS) 
    override PYTHON = python${python_version} 
else 
    ifdef PYTHON_OVERRIDE 
     override PYTHON = ${PYTHON_OVERRIDE} 
    endif 

    ifeq (${PYTHON},) 
     override PYTHON = python 
    endif 


    python_version = $(shell ${PYTHON} --version 2>&1 | cut -d ' ' -f 2 | cut -d '.' -f 1-2) 
    PYTHON_CONFIG ?= python${python_version}-config 

    PY_LIBSPEC = $(shell ${PYTHON_CONFIG} --libs) 
    PY_INCLUDESPEC = $(shell ${PYTHON_CONFIG} --includes) 
    PY_CFLAGS = $(shell ${PYTHON_CONFIG} --cflags) 
    PY_LDFLAGS = $(shell ${PYTHON_CONFIG} --ldflags) 
    SHLIB_LINK = $(PY_LIBSPEC) $(PY_LDFLAGS) $(PY_ADDITIONAL_LIBS) $(filter -lintl,$(LIBS)) 
    override PG_CPPFLAGS := $(PY_INCLUDESPEC) $(PG_CPPFLAGS) 
    override CPPFLAGS := $(PG_CPPFLAGS) $(CPPFLAGS) 
endif 


PYTHON_TEST_VERSION ?= $(python_version) 
PG_TEST_VERSION ?= $(MAJORVERSION) 
SUPPORTS_WRITE=$(shell expr ${PG_TEST_VERSION} \>= 9.3) 

TESTS  = $(wildcard test-$(PYTHON_TEST_VERSION)/sql/multicorn*.sql) 
ifeq (${SUPPORTS_WRITE}, 1) 
    TESTS += $(wildcard test-$(PYTHON_TEST_VERSION)/sql/write*.sql) 
endif 
REGRESS  = $(patsubst test-$(PYTHON_TEST_VERSION)/sql/%.sql,%,$(TESTS)) 
REGRESS_OPTS = --inputdir=test-$(PYTHON_TEST_VERSION) --load-language=plpgsql 

$(info Python version is $(python_version)) 

回答

1

最好的做法是運行make作爲

PYTHON=python2.7 make 

如果你在你Makefile線26看一看,你會看到,編譯由setup.py腳本處理,由$(PYTHON)變量中指定的可執行文件調用,您可以通過從環境中進行設置來覆蓋該變量。另一種方式來做到這一點(例如,如果你想要做的多個版本)是這一個:

export PYTHON=python2.7 
make 

通過更改環境變量或命令行參數腳本行爲更加合理,往往比打補丁腳本代碼更簡單。

關於Makefile變量的更多信息:http://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_6.html#SEC68