経緯
vaexを使おうとして、OSデフォルトのPython2.7.5ではバグ?により使えず、
Python2.7.17をインストールしてプロジェクトを続行をしようとしたら軽くハマったのでメモ。
環境
CentOS 7.5.1804
Python2.7.17
Poetry 1.0.5
tcsh
インストール
pyenv等他のインストール方法も試したけど、他のマシンに環境構築するのも一番お手軽そうなsclo pythonを使うことにした。
sudo yum -y install centos-release-scl-rh
sudo yum -y install python27
本来ならここで、/opt/rh/python27/enable
がインストールされるはずだが、何故かされない時がある。
その場合手書きするか、python36などをインストールしてenableをコピーして改変するか。
enableはbashで書かれているので、tcshに書き直す。
vim /opt/rh/python27/enable
#!/usr/bin/env tcsh
if ($?PATH) then
setenv PATH /opt/rh/python27/root/usr/bin:${PATH}
else
setenv PATH /opt/rh/python27/root/usr/bin
endif
if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH /opt/rh/python27/root/usr/lib64:${LD_LIBRARY_PATH}
else
setenv LD_LIBRARY_PATH /opt/rh/python27/root/usr/lib64
endif
if ($?MANPATH) then
setenv MANPATH /opt/rh/python27/root/usr/share/man:${MANPATH}
else
setenv MANPATH /opt/rh/python27/root/usr/share/man
endif
if ($?PKG_CONFIG_PATH) then
setenv PKG_CONFIG_PATH /opt/rh/python27/root/usr/lib64/pkgconfig:${PKG_CONFIG_PATH}
else
setenv PKG_CONFIG_PATH /opt/rh/python27/root/usr/lib64/pkgconfig
endif
if ($?XDG_DATA_DIRS) then
setenv XDG_DATA_DIRS /opt/rh/python27/root/usr/share:${XDG_DATA_DIRS}
else
setenv XDG_DATA_DIRS /opt/rh/python27/root/usr/share
endif
有効化
tcshなので、他のシェルのようにscl enable python27 tcsh
は使えないので、直接enableをsourceし有効化。
$ python -V
Python 2.7.5
$ source /opt/rh/python27/enable
$ python -V
Python 2.7.17
ちゃんとバージョン変わっていればOK.
poetry環境作成
p
enableをsourceしたシェルでpoetry init
すでにOS Pythonでvirtualenvを作っていたら、一度環境を削除し、poetry install
これでSCLO Pythonで環境が作成される。
開発環境
ここまででターミナルから使う文には問題ないが、作成した環境のPythonをPyCharmから使おうとするとエラーが出て上手く行かなかった。
(エラーログ消失)
原因は、enableで設定した環境変数が、PyCharmからだと設定されていないからだった。
あまり綺麗ではないが、python2.7をシェルスクリプトにしてしまい、python実行時にenableをsourceすれば解決出来た。
cd `poetry env info --path`/bin
mv python2.7 python2.7_original
vim python2.7
#!/usr/bin/env tcsh
source /opt/rh/python27/enable
`dirname $0`/python2.7_original $*