8
4

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 3 years have passed since last update.

pyenv 環境をマルチユーザで共有する話

Last updated at Posted at 2020-02-05

Overview

共有の開発環境とかで、ユーザごとに pyenv 入れると容量がえらいことになるので、
共通で1つ入れて一般ユーザで使い回せるようにする話。

要点

  • pyenv group を作る
  • システム内に1つ pyenv を入れる
    • pyenv group 所有にして、
    • group 読み込み権限を付ける
  • 一般ユーザを pyenv group に所属させる

docker も採用してる手法。

環境

docker でもいいんだけど、せっかくなので vagrant でいきます。

$ vagrant -v
Vagrant 2.2.3
Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

ホスト側

起動して

$ vagrant up

vmに入る

$ vagrant ssh
Last login: Wed Feb  5 03:53:55 2020 from 10.0.2.2
[vagrant@localhost ~]$

以降は vm の中で実行

rootになっておきます

[vagrant@localhost ~]$ sudo su -
Last login: 水  2月  5 03:50:50 UTC 2020 on pts/1
[root@localhost ~]#

pyenv環境を作成

環境変数設定用の sh を用意しておく

pyenv.sh
if [ -e /opt/pyenv ]; then
    export PYENV_ROOT=/opt/pyenv
    export PATH="${PYENV_ROOT}/bin:$PATH"
    eval "$(pyenv init -)"
fi

/opt/pyenv に install します。

$ yum install -y \
    @development zlib-devel bzip2 bzip2-devel readline-devel sqlite \
    sqlite-devel openssl-devel xz xz-devel libffi-devel findutils

$ curl https://pyenv.run | PYENV_ROOT=/opt/pyenv bash

$ groupadd pyenv \
    && chown -R :pyenv /opt/pyenv/ \
    && chmod g+r -R /opt/pyenv/

$ cp /vagrant/pyenv.sh /etc/profile.d/

確認

vm に入り直して

[vagrant@localhost ~]$ pyenv -v
pyenv 1.2.16

[vagrant@localhost ~]$ pyenv versions
* system (set by /opt/pyenv/version)

バージョン指定で python を入れる

pyenv install は root じゃないとできないので、

[root@localhost ~]# pyenv install 3.8.1
(..snip..)

[root@localhost ~]# pyenv install 3.7.6
(..snip..)

入りました。

[root@localhost ~]# pyenv  versions
* system (set by /opt/pyenv/version)
  3.7.6
  3.8.1

一般ユーザでも確認。
書き込み権限を付けてないので pyenv: cannot rehash: /opt/pyenv/shims isn't writable とか出るけど気にせず。

[root@localhost ~]# su - vagrant
Last login: Wed Feb  5 04:01:04 UTC 2020 from 10.0.2.2 on pts/0
pyenv: cannot rehash: /opt/pyenv/shims isn't writable
[vagrant@localhost ~]$ pyenv versions
* system (set by /opt/pyenv/version)
  3.7.6
  3.8.1

ここまでが準備。

動作確認

vm の中で実行する。

一般ユーザを追加

pyenv グループに所属させるのを忘れずに。

[root@localhost ~]# useradd foo -G pyenv

[root@localhost ~]# id foo
uid=1001(foo) gid=1002(foo) groups=1002(foo),1001(pyenv)

既存ユーザを group に追加する場合はこう。

[root@localhost ~]# useradd bar
[root@localhost ~]# gpasswd -a bar pyenv

[root@localhost ~]# id bar
uid=1002(bar) gid=1003(bar) groups=1003(bar),1001(pyenv)

一般ユーザで pyenv を使用する

pyenv global は使えないので、各ユーザごとに pyenv local する。

3.7.6 を使いたい人

[root@localhost ~]# su - bar
Last login: Wed Feb  5 03:55:34 UTC 2020 on pts/2
pyenv: cannot rehash: /opt/pyenv/shims isn't writable

[bar@localhost ~]$ pyenv local 3.7.6
[bar@localhost ~]$ python -V
Python 3.7.6

virtualenv in pyenv も使える

[bar@localhost ~]$ python -m venv .venv
[bar@localhost ~]$ . .venv/bin/activate

(.venv) [bar@localhost ~]$ python -V
Python 3.7.6
(.venv) [bar@localhost ~]$ which python
~/.venv/bin/python
(.venv) [bar@localhost ~]$ pip install numpy==1.18.1

(.venv) [bar@localhost ~]$ python -c 'import numpy; print(numpy.__version__)'
1.18.1

3.8.1 を使いたい人

[root@localhost ~]# su - foo
Last login: Wed Feb  5 03:54:47 UTC 2020 on pts/1
pyenv: cannot rehash: /opt/pyenv/shims isn't writable

[foo@localhost ~]$ pyenv local 3.8.1
[foo@localhost ~]$ python -V
Python 3.8.1

virtualenv を使わない場合は pip install--user オプションをつけるのを忘れずに。

[foo@localhost ~]$ python -m pip install --user numpy==1.15

[foo@localhost ~]$ python -c 'import numpy; print(numpy.__version__)'
1.15.0

おわり。

ちゃんと運用してないから使い込んでくとどうなるかは不明。
At Your Own Risk でどうぞ。

というか

docker 使おう。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?