0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS6でSCLのPython2.7をvirtualenv配下で使う

Posted at

はじめに

Python2.6はすでにサポートされなくなってしまいpip等でインストールしても動作しないのが増えてきてしまっています。
しかし悲しいことにCentOS6ではPython2.6のサポートなのでいろいろと困ってしまいます。

SCL(Software Collections)にPython2.7はいるのですが、sclを起動後、virtualenvで使おうとするとエラーが出て失敗してしまいます。

$ python --version
python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

で、もう少し使いやすくしよう。というので試行錯誤(?)したのが今回の方法です。

ざっくりな説明

  1. scl上でvirtualenv環境を作成する
  2. 上記で作成した仮想環境配下のbin/activateを/opt/rh/python27/enableファイルの中身を参考にして書き換える
  3. scl環境から抜ける
  4. virtualenv環境でPython2.7が使える!

そこそこな説明

sclをインストールしてsclのpython27をインストールする

この方法はあちこちあるので省略1

scl配下でvirtualenvを実行する

$ scl enable python27 "virtualenv py27"

とか

作成したvirtualenv配下のactivateを書き換える

書き換える箇所としてはPATHの書き換えているあたりの下にLD_LIBRARY_PATHとMANPATHとPKG_CONFIG_PATHを設定し、deactivate関数の中で書き換えた環境変数をもとに戻す感じ。
書き換える環境変数の内容は/opt/rh/python27/enableの中身を参照。

diffをとると以下みたいになると思う

--- py26/bin/activate
+++ py27/bin/activate
@@ -29,6 +29,21 @@
         unset _OLD_VIRTUAL_PS1
     fi

+    if [ -n "$_OLD_LD_LIBRARY_PATH" ] ; then
+        export LD_LIBRARY_PATH="$_OLD_LD_LIBRARY_PATH""
+        unset _OLD_LD_LIBRARY_PATH"
+    fi
+
+    if [ -n "$_OLD_MANPATH" ] ; then
+        export MANPATH="$_OLD_MANPATH"
+        unset _OLD_MANPATH
+    fi
+
+    if [ -n "$_OLD_PKG_CONFIG_PATH" ] ; then
+        export PKG_CONFIG_PATH="$_OLD_PKG_CONFIG_PATH"
+        unset _OLD_PKG_CONFIG_PATH
+    fi
+
     unset VIRTUAL_ENV
     if [ ! "$1" = "nondestructive" ] ; then
     # Self destruct!
@@ -46,6 +61,15 @@
 PATH="$VIRTUAL_ENV/bin:$PATH"
 export PATH

+_OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
+export LD_LIBRARY_PATH=/opt/rh/python27/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
+
+_OLD_MANPATH="$MANPATH"
+export MANPATH=/opt/rh/python27/root/usr/share/man:${MANPATH}
+
+_OLD_PKG_CONFIG_PATH="$PKG_CONFIG_PATH"
+export PKG_CONFIG_PATH=/opt/rh/python27/root/usr/lib64/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
+
 # unset PYTHONHOME if set
 # this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
 # could use `if (set -u; : $PYTHONHOME) ;` in bash

実行

後はいつもと同じようにvirtualenv配下のフォルダに入ってsource bin/activateするだけでpython 2.7が動く!

おわりに

python2.7も2020年には終了しちゃうんですよね。

  1. centos-release-sclとcentos-release-scl-rhの違いはなんだろう?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?