[PYTHON] Kombination von anyenv und direnv

Hintergrund

Die Funktionen von jedem werden auf einer anderen Seite angegeben.

Lassen Sie mich Ihnen ein Beispiel geben.

Es gibt ein Bio-Softwarepaket namens Qiime, und es ist schwierig, es selbst zu installieren. Ich muss verschiedene Bio-Befehle installieren,

Wenn Sie das sagen können, möchten Sie es nicht berühren. Außerdem möchte ich dem Server einen neuen hinzufügen,

Es fühlt sich an wie

Nicht nur das obige Beispiel

Mit Bio-Tools werden unzählige kleine Befehle und Skripte eingegeben.

Selbst wenn ich versuche, es einzuführen, werde ich verschiedene Nerven zermürben. Ob es einen Befehlsnamenkonflikt gibt, die diesmal installierte Liste verwalten, deinstallieren usw. Außerdem wies mich jeder von ihnen an, detaillierte Umgebungsvariablen festzulegen, und in einem Augenblick war . * Shrc durcheinander.

Selbstverständlich möchte ich ein einfaches Tool zum Umschalten der Umgebung (einschließlich Umgebungsvariablen).

Umgebungsumschaltung

Sie können Befehle mit den typischen "virtualenv" und "pyenv-virtualenv" wechseln, aber es ist schwierig, auch Umgebungsvariablen zu wechseln. Im Gegenteil, "direnv" berührt den Verwaltungsteil des Befehls nicht.

Deshalb,
  1. Die Befehlsinstallationsverwaltung lautet "pyenv" ("anyenv").
  2. Erstellen Sie zur Überprüfung von Software im kleinen Maßstab eine Umgebung mit mehreren Mandanten und verwenden Sie "pyenv shell", um Umgebungsvariablen auf der Shell zu überspringen. Damit es nach Beendigung der Arbeit abgeschnitten wird
  1. Lassen Sie das große Softwarepaket täglich auf "direnv" umschalten.
  2. Die Tools, mit denen ein Webserver eingerichtet werden muss, sind dieselben wie zuvor.

Basierend auf dem einfachen Konzept zu sagen, "anyenv" "direnv" zu installieren und die Umgebung zu erstellen. Im Folgenden wird dies als Beispiel verwendet, wobei davon ausgegangen wird, dass eine isolierte Umgebung von Qiime-1.8.0 erstellt wird.

CentOS 6.6 (einige Macs)

anyenv

  1. Installation des Hauptgeräts "anyenv"
  2. Installieren Sie pyenv, plenv, jenv

Im Moment brauche ich kein anderes "* env" in der Praxis

Zuerst evakuieren

python


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

Wenn sich im gemeinsamen Bibliothekspfad etwas wie ".local" in den Überresten der Vergangenheit befindet, sollte es aufgeräumt werden

anyenv Installation

python


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

pyenv Installation

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

Auf dem Mac bei der Installation von "Python"

python


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

Wenn Sie dies nicht tun, wird es nicht funktionieren

pyenv-virtualenv Erstellen Sie eine isolierte Umgebung für die Verwendung Sie können mehrere Umgebungen mit derselben Version von "Python" erstellen

python


$ pyenv virtualenv 2.7.3 qiime
$ pyenv rehash

plenv Installation

plenv


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

cpanm wird separat installiert

Jenv Installation

jenv


$ anyenv install jenv
$ alternatives --config java

Es gibt 3 Programme'java'Bereitstellen.

Befehl auswählen
-----------------------------------------------
   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

Tailliert

Wenn Sie "gnu screen" on "mac" verwenden und "zsh" verwenden und "anyenv" regelmäßig verwenden möchten

python


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

Ich muss tun

Wenn Sie "gnu screen" in "CentOS" verwenden und "zsh" verwenden und "anyenv" regelmäßig verwenden möchten

python


% cd /etc
% sudo mv zshrc zshrc.bak

Vielleicht muss ich es tun (nicht verifiziert).

direnv

gehe installieren

Ohne

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    #Wo immer du willst
$ cd ../bin/go
$ export GOROOT=$PWD
$ cd go/bin
$ export PATH=$PWD:$PATH

Wenn GOROOT nicht gesetzt ist, verursacht direnv beim Kompilieren einen Fehler

direnv Installation

python


$ git clone https://github.com/zimbatm/direnv
$ cd direnv
$ make install DESTDIR=/PATH/TO/DIR  #Wo immer du willst
$ eval "$(direnv hook bash)"

Versuchen

python


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

Unzufriedenheit

Ändern Sie die Eingabeaufforderung mit zsh

.envrc


export PROMPT='Qiime-1.8.0 $'

Ich möchte etwas tun, aber es interpretiert die Variablen in der Eingabeaufforderung nicht und es ist miserabel, wenn ich zu / wechsle. Ist es nur meine Umgebung? Ich möchte .envrc nicht in / einfügen,

Operation

Beschreiben Sie Folgendes in .bashrc

.bashrc


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

Es ist unnötig zu erwähnen, dass der Weg zu "anyenv", "direnv" vergehen soll.

Zum Zeitpunkt der Installation

Aktivieren und installieren Sie explizit nur in dieser Shell, z. B. mit der "pyenv-Shell"

Die einzelnen Befehle sind

python


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

Streben Sie nach Isolation durch

Apropos

Durch "pyenv rehash" für "pyenv" werden einzelne Befehle (wie das installierte "ghc", das separat beschrieben wird) auch mit "$ {HOME} /. Anyenv / envs / pyenv / shims" synchronisiert.

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

Gleiches galt für "plenv". Ob Sie es verwenden oder nicht

Bei Verwendung von Befehlen

Mit der Funktion von direnv

Zum Beispiel nur das Verzeichnis, in dem Sie Qiime-1.8.0 verwenden möchten

python


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

Wenn Sie tun

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
(Weggelassen)

Aber

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
(Weggelassen)

Wechseln zu

Natürlich bleibt es im Nachkommenverzeichnis gültig

Externe Befehle werden ebenfalls richtig geschaltet. 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 in bin
$ 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:   #Gewünschte Version
$ cd ../
$ direnv: unloading
$ blastall | head -2 | tail -1
blastall 2.2.26   arguments:

Andere Leute

Das ist in Ordnung für den persönlichen Gebrauch, aber es gibt Fälle, in denen andere Personen auf dem Server es verwenden möchten. Selbst wenn jemand anderes das obige ".bashrc" so kopiert, wie es ist, funktioniert "anyenv" nicht ("direnv" funktioniert normalerweise als einzelne Einheit). Wenn sich diese "andere Person" auf einem Niveau befindet, auf dem sie "anyenv" oder "direnv" persönlich installieren und verwenden kann, wird sie damit umgehen, aber wenn nicht.

.bashrc


eval "$(anyenv init -)" 

Speichern Sie das Ergebnis von "eval" $ (anyenv init-) "" separat und "source" in der ".bashrc" der Zielperson, anstatt es so wie es ist einzubetten.

Auf diese Weise verhält es sich wie erwartet.

Recommended Posts

Kombination von anyenv und direnv
Kombination von rekursiv und Generator
Versionsverwaltung von Node, Ruby und Python mit anyenv
Das Problem der Lügner und der Ehrlichkeit
Mechanismus von Pyenv und Virtualenv
Erklärung und Implementierung von SocialFoceModel
Differenzierung der Sortierung und Verallgemeinerung der Sortierung
Koexistenz von Pyenv und Autojump
Verwendung und Integration von "Shodan"
Das Problem der Lügner und der Ehrlichkeit
Auftreten und Auflösung von tensorflow.python.framework.errors_impl.FailedPreconditionError
Sehr praktische Kombination von CLI Image Viewer Überzug und Ranger
Vergleich von Apex und Lamvery
Quellinstallation und Installation von Python
Einführung und Tipps von mlflow.Tracking
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.1. Pipeline- und Feature-Union: Kombination von Schätzern
Umgebungskonstruktion von Python und OpenCV
Grundkenntnisse in Linux und Grundbefehle
Reihenfolge der Argumente für RegularGridInterpolator und interp2d
Die Geschichte von Python und die Geschichte von NaN
Erläuterung und Implementierung von PRML Kapitel 4
Einführung und Implementierung von JoCoR-Loss (CVPR2020)
Vorteile und Beispiele für die Verwendung von Rabbit Mq
Erklärung und Implementierung des ESIM-Algorithmus
Mischgefahr! Ndarray und Matrix
Installation von SciPy und matplotlib (Python)
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Einführung und Implementierung der Aktivierungsfunktion
Installieren Sie GoLang in goenv von anyenv
Missverständnisse und Interpretationen von Luigis Abhängigkeiten
Erklärung und Implementierung von einfachem Perzeptron
Berechnung der selbst erstellten Klasse und der vorhandenen Klasse
Dies und das von Python-Eigenschaften
Versuchsplanungsmethode und Kombinationsoptimierung
Merkmale der symbolischen und harten Verbindung
Koexistenz von Python2 und 3 mit CircleCI (1.0)
[Excel] Hinzufügen von Zeichenketten (Kombination)
Zusammenfassung der Python-Indizes und -Slices
Aggregation und Visualisierung akkumulierter Zahlen
Reputation von Python-Büchern und Nachschlagewerken
Die goldene Kombination aus Embulk und BigQuery glänzt mit Digdag noch mehr