0
1

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.

sudo権限の無いUbuntuでPython環境を整えるためのあれこれ

Last updated at Posted at 2019-07-25

root権限が無いサーバー(Ubuntu16.04)でPython環境を作る際、仮想環境に悩んだのでまとめておきます。導入の解説は無いのでご理解ください。

1日目 virtualenvの導入

まず候補に挙げたのが、pyenvとvirtualenvです。それぞれの主な利点・欠点は,

  • pyenv
    • 利点 : 初めに設定すれば、以後ディレクトリに入るだけでバージョンが切り替わる
    • 欠点 : 複数のPythonバージョンを切り替えて使えるが、同一のバージョンで複数の環境が作れない
  • virtualenv
    • 利点 : 同一のバージョンで環境をいくらでも作れる
    • 欠点 : 環境の切り替え時にいちいちactivate/deactivateするのが面倒

pyenvはactivateする手間が無い分楽ですが、同じPythonのバージョンで複数の環境が作れない以上どうしても仮想環境一個一個が大きくなってしまいます。
出来るだけミニマルで、要らなくなったら気軽に消せるような仮想環境が欲しかったためvirtualenvを選びました。
また、virtualenvと全く同じ動作を実現するvenvというものがPython3以上から標準化されていますが、手元にPython2で書かれたプロジェクトがあるため今回はvirtualenvにしました。

2日目 めんどくさい

さて、virtualenvを入れてクリーンな環境作りを、と思っていたのですが問題が起こりました。
virtualenvはpyenvと違い、Pythonそのものは自前で用意する必要があります。

$ apt install python3.6

sudo権限が無いので上記のようなコマンドは使えず、通常

$ wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
$ ./configure --prefix=$HOME/usr
$ make
$ make install

このようにソースからインストールしなければなりません。面倒だ。

また、sqlite3などのモジュールが無い場合、モジュールをインストール後一度Pythonそのものを入れ直す必要があります

apt-get remove python3

sudoがあればこの一言で消せる(らしい)のですが、あいにくapt系は一切使えません。インストール時、自分のローカル$HOME/usrとかを指定していたならば、そこに入って関係のあるファイルを一個一個探して消す必要があります。こうなるととっても面倒です。
※かなり憶測が含まれます。別に消さなくても再インストールで上書きすればいいんじゃ?という気もしますがあいにくやったことないから分からない。とりあえずPythonの削除が手間だというのは恐らく正しいです。

この削除問題は、インストール時にPythonバージョン毎にディレクトリを分ければ解決できます。

$ wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
$ ./configure --prefix=$HOME/usr/python3.6.9
$ make
$ make install

これで消したいときは

rm -r $HOME/usr/python3.6.9

で一発です。

さて削除は楽になりましたが、インストールが一々めんどくさい…それにもしミスって$HOME/usr直下にインストールしたら削除するのが大変だし、sudo権限が無くても簡単にPythonを導入・削除できるバージョン管理ツールは無いものか…

3日目 pyenvの導入

ありました。pyenvです。

インストール

pyenv install 3.6.9

アンインストール

pyenv uninstall 3.6.9

簡単にPythonを入れたり消したりできます。

インストールしたPythonは

$HOME/.pyenv/versions/

に置かれることになります。つまり

virtualenv $hoge/env_py3.6 --python=$HOME/.pyenv/versions/3.6.9/bin/python3.6

このように、pyenvで入れたPythonからvirtualenvが仮想環境を作成するというコンビネーションが可能になります。

終わりに

斯くして、Pythonの導入はpyenvに任せ、仮想環境はvirtualenvで作るというスタイルに落ち着いたのでした。
他にも、pyenv-virtualenvという元々ハイブリッドになってるやつがあるらしく気になっています。ただ、これはactivate/deactivateしないでいい代償にかなり重いと聞いたので、とりあえずはこのまま使ってみます。

7/28追記

pipenvなる便利ツールがあり、今はpyenv+pipenvのような運用が流行っているそうです…
全然知らなくってまだvirtualenvとの違いが分かっていないので色々調べて試してみます。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?