レンタルサーバーにPythonを設定
共有サーバーでpipが使えなくて困っていませんか?
mixhostなどのレンタルサーバーでアプリをデプロイしたいとおもっても共有サーバーでpipが使えないのでどうしたらいいかわからない・・
そもそもPython2しか入ってないじゃん・・
そんなあなたに朗報です。
condaを使うことで解決できました。
Anacondaで仮想環境を構築し、python3を使えるようにしてflaskやstreamlitをデプロイしちゃいましょう!
まずはSSHでサーバーに接続し、pyenvを使ってバージョン管理を行います。
SSH接続に関しては飛ばします・・
mixhostのsPanelのターミナルからでも可能です。
まずは
pyenvをインストール
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
次にvertuavをインストール
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
次にPATHを通します。
$ nano ~/.bashrc
./bashrcにpyenvのPATHを追加
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
変更を反映させるために
$ source ~/.bashrc
これでPATHが通ります。
pyenvがインストールできたらリストを確認し
$ pyenv install --list
そこに表示されている最新の
anacondaをインストール
$ pyenv install anaconda3-2023.03
インストールできているか確認
$ pyenv versions
これで確認できるとanacondaのPATHも通します。
$ echo 'export PATH=/home/(あなたのusername)/.pyenv/versions/anaconda3-2023.03/bin' >> ~/.bashrc
これで最後に先ほど./bashrcに追加した
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
これを削除するとcondaが使えるようになります。
condaをアップデートしましょう
$ conda update conda
この設定で再度SSH接続した際、システムの一般的なバイナリディレクトリ(例:/usr/local/bin、/usr/bin、/bin)が含まれていない場合もあります。
私の環境でこのPATHが含まれていなかったので「ls」が使えずびっくりしました・・。
「ls」コマンドを使えるように、
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
このコマンドで「ls」が使えるようになるので再度、
$ nano ~/.bashrc
出力されたエディタに
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH
これを追加してください。
再度反映させるために
$ source ~/.bashrc
最後に確認
$ echo $PATH
これでPATHを確認してください。
またconda環境が自動で設定されているのを修正するには
$ nano ~/.bashrc
これにて出力される
# >>> conda initialize >>>
・・・
・・・
# <<< conda initialize <<<
この部分を全部コメントアウトしてください。
これで手動でconda環境を設定できるようになります。
今回のcondaを使った方法は間違った操作をするとサーバーに不具合を与える可能性があるので自己責任でお願いします。
Heroku やAWS 、Google Cloud Platform (GCP)などのプラットフォームを使えばもっと簡単にできるのでほんとはそちらがおすすめです。