[PYTHON] Combinaison de anyenv et direnv

Contexte

Les caractéristiques de chacun seront données sur une autre page.

Laisse moi te donner un exemple.

Il existe un progiciel bio appelé Qiime, et il est difficile de l'installer vous-même. Je dois installer diverses commandes bio,

Si vous pouvez dire cela, vous ne voulez pas y toucher. De plus, je souhaite en ajouter un nouveau au serveur,

C'est comme ressentir

Pas seulement l'exemple ci-dessus

Avec les outils bio, il y a des tonnes de petites commandes et de scripts ajoutés.

Même si j'essaie de l'introduire, je vais épuiser divers nerfs. S'il y a un conflit de nom de commande, gérer la liste installée cette fois, désinstaller, etc. En outre, chacun d'eux m'a demandé de définir des variables d'environnement détaillées, et en un clin d'œil, . * Shrc a été foiré.

Bien entendu, je veux un outil de changement d'environnement simple (y compris les variables d'environnement).

Changement d'environnement

Vous pouvez changer de commande avec les types "virtualenv" et "pyenv-virtualenv", mais il est difficile de changer même les variables d'environnement. Au contraire, direnv ne touche pas la partie gestion de la commande.

Donc,
  1. La gestion de l'installation des commandes est pyenv (ʻanyenv`)
  2. Pour la vérification des logiciels à petite échelle, créez un environnement multi-tenant pour celui-ci et utilisez pyenv shell pour ignorer les variables d'environnement sur le shell. Pour qu'il soit coupé une fois le travail terminé
  1. Laissez le changement de progiciel à grande échelle sur une base quotidienne à «direnv».
  2. Les outils nécessaires pour configurer un serveur Web sont les mêmes qu'auparavant.

Sur la base du concept simple de ʻanyenv direnv`, nous avons décidé d'installer et de construire l'environnement. Ci-dessous, nous l'utiliserons comme exemple en supposant qu'un environnement isolé de Qiime-1.8.0 sera créé.

CentOS 6.6 (certains macs)

anyenv

  1. Installation de l'unité principale ʻanyenv`
  2. Installez pyenv, plenv, jenv

Pour l'instant, je n'ai besoin d'aucun autre * env dans la pratique

Tout d'abord, évacuez

python


$ mv .bashrc .bashrc~
$ mv .local .local.bak

S'il y a quelque chose dans le chemin de bibliothèque commun tel que .local dans les vestiges du passé, il doit être rangé

installation anyenv

python


$ export PERL5OPT=   #<=Seulement nous avons besoin
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ export PATH=${HOME}/.anyenv/bin:$PATH
$ eval "$(anyenv init -)"

installation pyenv

python


$ anyenv install pyenv
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.anyenv/envs/pyenv/plugins/pyenv-virtualenv
$ eval "$(anyenv init -)"     # exec $SHELL -l 
$ pyenv install 2.7.3         # @mac: $ CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 2.7.3
$ pyenv install 3.3.6
$ pyenv rehash

Sur mac, lors de l'installation de python

python


$ CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 2.7.3 

Si tu ne le fais pas, ça ne marchera pas

pyenv-virtualenv Créer un environnement isolé à utiliser avec Vous pouvez créer plusieurs environnements avec la même version de python

python


$ pyenv virtualenv 2.7.3 qiime
$ pyenv rehash

installation plenv

plenv


$ anyenv install plenv
$ plenv install 5.20.1
$ plenv shell 5.20.1
$ plenv install-cpanm

cpanm est installé séparément

installation de jenv

jenv


$ anyenv install jenv
$ alternatives --config java

Il y a 3 programmes'java'Fournir.

Sélectionnez la commande
-----------------------------------------------
   1           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
 + 2           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
*  3           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
$ jenv add /usr/lib/jvm/jre-1.5.0-gcj 
$ jenv add /usr/lib/jvm/jre-1.6.0-openjdk.x86_64
$ jenv add /usr/lib/jvm/jre-1.7.0-openjdk.x86_64

Ajusté

Si vous êtes un 'mac', utilisez'gnu screen 'et utilisez'zsh', vous voulez utiliser ʻanyenv` régulièrement.

python


% cd /etc               
% sudo mv zshenv zshenv.bak 
#% sudo mv zshenv zprofile 

je dois faire

Si vous utilisez'gnu screen'avec'CentOS 'et que vous utilisez'zsh' et que vous souhaitez utiliser ʻanyenv` régulièrement

python


% cd /etc
% sudo mv zshrc zshrc.bak

Peut-être que je dois le faire (non vérifié).

direnv

allez installer

Sans pour autant

python


$ wget -q https://storage.googleapis.com/golang/go1.4.linux-386.tar.gz
$ tar zxf go1.4.linux-amd64.tar.gz 
$ mv go ../bin    #Où vous voulez
$ cd ../bin/go
$ export GOROOT=$PWD
$ cd go/bin
$ export PATH=$PWD:$PATH

Si GOROOT n'est pas défini, direnv provoquera une erreur lors de la compilation.

installation de direnv

python


$ git clone https://github.com/zimbatm/direnv
$ cd direnv
$ make install DESTDIR=/PATH/TO/DIR  #Où vous voulez
$ eval "$(direnv hook bash)"

essayer

python


$ cat /PATH/TO/.envrc
export FOOBAR=foobar
$ cd /PATH/TO
direnv: loading .envrc                                                                                                                                                                                                                    
direnv: export + FOOBAR

Insatisfaction

Changer l'invite avec zsh

.envrc


export PROMPT='Qiime-1.8.0 $'

Je veux faire quelque chose, mais cela n'interprète pas les variables dans l'invite, et c'est misérable quand je passe à /. Est-ce juste mon environnement? Je ne veux pas mettre .envrc dans /,

Opération

Décrivez ce qui suit dans .bashrc

.bashrc


export PATH=${HOME}/.anyenv/bin:$PATH
eval "$(anyenv init -)"
eval "$(direnv hook bash)"

Inutile de dire que le chemin vers ʻanyenv, direnv` est supposé passer.

Au moment de l'installation

Activer et installer explicitement uniquement dans ce shell, comme avec pyenv shell

Les commandes individuelles sont

python


$ ./configure --prefix=${HOME}/.anyenv/envs/pyenv/versions/qiime

Visez l'isolement en

Au fait

Par «pyenv rehash» pour «pyenv», les commandes individuelles (comme le «ghc» installé, qui sera décrit séparément) sont également synchronisées avec «$ {HOME} /. Anyenv / envs / pyenv / shims».

python


$ cat ${PYENV_ROOT}/pyenv/shims/ghc
#!/usr/bin/env bash
set -e
[ -n "$PYENV_DEBUG" ] && set -x

program="${0##*/}"
if [ "$program" = "python" ]; then
  for arg; do
    case "$arg" in
    -c* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export PYENV_DIR="${arg%/*}"
        break
      fi
      ;;
    esac
  done
fi

export PYENV_ROOT="/PATH/TO/.anyenv/envs/pyenv"
exec "/PATH/TO/.anyenv/envs/pyenv/libexec/pyenv" exec "$program" "$@"
$ which ghc
~/.anyenv/envs/pyenv/shims/ghc
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.8.3
$ pyenv shell 3.3.6
$ ghc --version
pyenv: ghc: command not found

The `ghc' command exists in these Python versions:
  qiime

La même chose était vraie pour «plenv». Que vous l'utilisiez ou non

Lors de l'utilisation de commandes

Utilisation de la fonction de direnv

Par exemple, seul le répertoire dans lequel vous souhaitez utiliser Qiime-1.8.0

python


$ cat /PATH/TO/DIR/.envrc
export PYENV_VERSION=qiime
export JENV_VERSION=1.6.0.33
$ direnv allow

Si tu fais

python


$ pyenv versions
* system (set by PYENV_VERSION environment variable)
  2.7.3
  3.3.6
  qiime
$ jenv versions
* system (set by JENV_VERSION environment variable)
  1.5
  1.5.0
  1.6
  1.6.0.33
  1.7
  1.7.0.71
(Omis)

Mais

python


$ cd /PATH/TO/DIR
direnv: loading .envrc
direnv: export ~JENV_VERSION ~PYENV_VERSION
$ pyenv versions
  system
  2.7.3
  3.3.6
* qiime (set by PYENV_VERSION environment variable)
$ jenv versions
  system
  1.5
  1.5.0
  1.6
* 1.6.0.33 (set by JENV_VERSION environment variable)
  1.7
  1.7.0.71
(Omis)

Basculer vers

Bien sûr, il reste valide dans le répertoire descendant

Les commandes externes sont également commutées correctement. ex) blastall

python


$ which blastall
/home/XXXX/.anyenv/envs/pyenv/shims/blastall
$ blastall | head -2 | tail -1
blastall 2.2.26   arguments:   # /usr/local/Version en bac
$ cd /PATH/TO/DIR
direnv: loading .envrc
direnv: export ~JENV_VERSION ~PYENV_VERSION
$ which blastall
/home/XXXX/.anyenv/envs/pyenv/shims/blastall
$ blastall | head -2 | tail -1
blastall 2.2.22   arguments:   #Version souhaitée
$ cd ../
$ direnv: unloading
$ blastall | head -2 | tail -1
blastall 2.2.26   arguments:

Les autres gens

C'est bien pour un usage personnel, mais il y a des cas où d'autres personnes sur le serveur veulent l'utiliser. Ainsi, même si quelqu'un copie le .bashrc ci-dessus tel quel, ʻanyenv ne fonctionne pas ( direnv fonctionne normalement comme une seule unité). Si cette "autre personne" est à un niveau où il peut personnellement installer et utiliser ʻanyenv ou direnv, eh bien, il s'en chargera, mais sinon.

.bashrc


eval "$(anyenv init -)" 

Au lieu de l'incorporer tel quel, enregistrez le résultat de ʻeval "$ (anyenv init-)" séparément et source dans le fichier .bashrc` de la personne cible.

De cette façon, il se comporte comme prévu.

Recommended Posts

Combinaison de anyenv et direnv
Combinaison de récursif et de générateur
Gestion des versions de Node, Ruby et Python avec anyenv
Le problème des menteurs et de l'honnêteté
Mécanisme de pyenv et virtualenv
Explication et mise en œuvre de SocialFoceModel
Différenciation du tri et généralisation du tri
Coexistence de pyenv et autojump
Utilisation et intégration de "Shodan"
Le problème des menteurs et de l'honnêteté
Occurrence et résolution de tensorflow.python.framework.errors_impl.FailedPreconditionError
Combinaison très pratique de la visionneuse d'images CLI Überzug et Ranger
Comparaison d'Apex et de Lamvery
Installation source et installation de Python
Introduction et astuces de mlflow.
[Français] scikit-learn 0.18 Guide de l'utilisateur 4.1. Union des pipelines et des fonctionnalités: combinaison d'estimateurs
Construction d'environnement de python et opencv
Connaissance de base de Linux et des commandes de base
Ordre des arguments pour RegularGridInterpolator et interp2d
L'histoire de Python et l'histoire de NaN
Explication et mise en œuvre de PRML Chapitre 4
Introduction et mise en œuvre de JoCoR-Loss (CVPR2020)
Avantages et exemples d'utilisation de Rabbit Mq
Explication et implémentation de l'algorithme ESIM
Risque de mélange! ndarray et matrice
Installer SciPy et matplotlib (Python)
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Introduction et mise en œuvre de la fonction d'activation
Installez GoLang dans goenv de anyenv
Malentendus et interprétations des dépendances de Luigi
Explication et mise en œuvre du perceptron simple
Calcul de la classe auto-fabriquée et de la classe existante
Ceci et cela des propriétés python
Méthode de planification des expériences et optimisation des combinaisons
Caractéristiques du lien symbolique et dur
Coexistence de Python2 et 3 avec CircleCI (1.0)
[Excel] Ajout de chaînes de caractères (combinaison)
Résumé des index et des tranches Python
Agrégation et visualisation des nombres accumulés
Réputation des livres Python et des livres de référence
La combinaison dorée d'Embulk et de BigQuery brille encore plus avec Digdag