2

CentOS 6.5 にPostgreSQL 拡張機能 Multicornをインストールしようとしています。私が抱えている問題は、Centos の python のデフォルト バージョンが 2.6 であり、Multicorn には 2.7 または 3.3 が必要なことです。このチュートリアルを使用して Multicorn をコンパイルしようとしていますが、少し古く、Python のバージョンを変更する手順が機能しなくなりました。

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

誰かが上記のコマンドを再び機能させるのを手伝ってくれますか、またはmakefileを編集してpythonのバージョンを変更する方法を教えてもらえますか? コマンドラインでpythonバージョン2.7を呼び出すことができますpython2.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 $< $@

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))
4

1 に答える 1

1

ベスト プラクティスは、次のように実行するmakeことです。

PYTHON=python2.7 make

の 26 行目を見ると、環境から設定することでオーバーライドできる $(PYTHON) 変数で指定された実行可能ファイルによって呼び出されるスクリプトMakefileによってコンパイルが処理されることがわかります。setup.pyこれを行う別の方法 (たとえば、複数のビルドを実行する場合) は次のとおりです。

export PYTHON=python2.7
make

環境変数またはコマンド ライン引数によってスクリプトの動作を変更することは、スクリプト ソース自体にパッチを適用するよりも合理的であり、多くの場合簡単です。

Makefile 変数の詳細: http://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_6.html#SEC68

于 2014-03-24T14:28:16.183 に答える