[PYTHON] L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs

Overview

Dans un environnement de développement partagé, si vous mettez pyenv pour chaque utilisateur, la capacité sera grande, donc Une histoire pour en mettre une en commun afin qu'elle puisse être réutilisée par les utilisateurs généraux.

Le point

La méthode adoptée par docker.

environnement

Vous pouvez utiliser docker, mais comme c'est un gros problème, je vais utiliser vagrant.

$ vagrant -v
Vagrant 2.2.3

Vagrantfile


Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

Côté hôte

Commencez

$ vagrant up

Entrez vm

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

Après cela, exécutez dans vm

Soyez root

[vagrant@localhost ~]$ sudo su -
Last login:Mer 5 février 03:50:50 UTC 2020 on pts/1
[root@localhost ~]#

Créer un environnement pyenv

Préparer sh pour définir les variables d'environnement

pyenv.sh


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

Installez dans / opt / pyenv.

$ 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/

Vérification

Entrez à nouveau vm

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

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

Insérer python en spécifiant la version

Puisque pyenv install ne peut être effectué que par root,

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

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

Il est entré.

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

Également confirmé par les utilisateurs généraux. Je n'ai pas la permission d'écrire, donc j'obtiens pyenv: cannot rehash: / opt / pyenv / shims n'est pas accessible en écriture, mais ne vous inquiétez pas.

[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

C'est la préparation.

Contrôle de fonctionnement

Exécutez dans vm.

Ajouter un utilisateur général

N'oubliez pas d'appartenir au groupe pyenv.

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

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

Pour ajouter un utilisateur existant au groupe:

[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)

Utilisez pyenv en tant qu'utilisateur général

Puisque pyenv global ne peut pas être utilisé, pyenv local est utilisé pour chaque utilisateur.

Ceux qui veulent utiliser 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

Vous pouvez également utiliser virtualenv dans 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

Ceux qui veulent utiliser 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

Si vous n'utilisez pas virtualenv, n'oubliez pas d'ajouter l'option --user à pip install.

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

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

fin.

On ne sait pas ce qui se passera si vous l'utilisez car il ne fonctionne pas correctement. À vos risques et périls.

je veux dire

Utilisons docker.

Recommended Posts

L'histoire du partage de l'environnement pyenv avec plusieurs utilisateurs
Utiliser plusieurs versions de l'environnement python avec pyenv
L'histoire de l'apprentissage profond avec TPU
Remarque: préparez l'environnement de CmdStanPy avec docker
Préparer l'environnement d'exécution de Python3 avec Docker
L'histoire de sys.path.append ()
L'histoire de l'arrêt du service de production avec la commande hostname
L'histoire de la création de l'environnement Linux le plus rapide au monde
Calculez la valeur totale de plusieurs colonnes avec awk
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Préparation de l'environnement d'exécution de PyTorch avec Docker Novembre 2019
Ajustez le rapport de plusieurs chiffres avec le gridspec de Matplotlib
L'histoire de la construction de Zabbix 4.4
L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
Unifier l'environnement de l'équipe de développement Python en commençant par Poetry
L'histoire de l'affichage d'images avec OpenCV ou PIL (uniquement)
L'histoire du rubyiste aux prises avec Python :: Dict data with pycall
L'histoire de la création d'un bot de boîte à questions avec discord.py
L'histoire du débogage dans l'environnement local car la compilation n'a pas fonctionné avec Read the Docs
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
L'histoire de Python et l'histoire de NaN
L'histoire de ne pas pouvoir exécuter pygame avec pycharm
Élever la version de pyenv elle-même
Le 14 mars est le jour du rapport de circonférence. L'histoire du calcul du ratio de circonférence avec python
django ne peut pas être installé dans l'environnement de développement de pipenv + pyenv
L'histoire de la participation à AtCoder
L'histoire de la création d'un pilote standard pour db avec python.
L'histoire de la sortie du maître de planétarium au format pdf avec Pycairo
L'histoire du "trou" dans le fichier
L'histoire de la visualisation des balises Qiita populaires avec Bar Chart Race
L'histoire du remontage du serveur d'application
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
L'histoire de l'exportation d'un programme
L'histoire de la création d'un module qui ignore le courrier avec python
Préparez l'environnement de développement avec anyenv
Créer un environnement avec pyenv et pyenv-virtualenv
Une histoire qui visualise le présent de Qiita avec Qiita API + Elasticsearch + Kibana
L'histoire d'un capteur de stationnement en 10 minutes avec le kit de démarrage GrovePi +
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
django-allauth gère plusieurs types d'utilisateurs à l'aide d'un utilisateur personnalisé (utilisateur multi-type)
L'histoire de la création d'une caméra sonore avec Touch Designer et ReSpeaker
Préparer l'environnement de Chainer sur l'instance spot EC2 avec AWS Lambda
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
L'histoire de la tentative de pousser SSH_AUTH_SOCK obsolète avec LD_PRELOAD à l'écran
L'histoire de l'utilisation de mysqlclient car PyMySQL ne peut pas être utilisé avec Django 2.2
[Pyenv] Construire un environnement python avec ubuntu 16.04
[Ubuntu 18.04] Créer un environnement Python avec pyenv + pipenv
L'histoire d'essayer de reconnecter le client
L'histoire d'une erreur dans PyOCR
Utilisez smbus avec python3 sous environnement pyenv
Alignez la taille de la barre de couleurs avec matplotlib
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
Vérifier l'existence du fichier avec python
À propos de l'environnement virtuel de Python version 3.7
L'histoire de la fabrication d'un moule immuable