2017-12-12 2 views
0

Ich schreibe ein Bash-Skript mit dem Ziel, es auf einem Computer-Cluster hosten. Ich möchte, dass das Skript eine Conda-Umgebung für den Benutzer erstellt, der es ausführt, so dass jeder in unserem Team schnell die gleiche Arbeitsumgebung einrichten kann.Bash und Conda: Nicht-Conda-Pakete in Conda-Umgebung mit ausführbaren Bash-Skript installieren

Ich weiß, das ist ein bisschen übertrieben für die Anzahl der erforderlichen Befehle, aber ich wollte etwas Bash-Scripting üben. Hier ist mein Skript so weit:

#!/bin/bash 

# Load anaconda 
module load Anaconda/4.2.0 

# Create environment 
conda create -n ADNI 

# Load environment 
source activate ADNI 

# Install image processing software 
pip install med2image 

echo 'A working environment named ADNI has been created.' 
echo 'Please run `source activate ADNI` to work in it.' 

Dieses Skript erstellt die Umgebung erfolgreich. Doch sobald ich die Umgebung nach der Ausführung des Skripts zu laden, betreibe ich conda list zu sehen, welche Pakete werden innerhalb sie geladen und erhalten die folgende Ausgabe:

(ADNI) MLG-BH0039:ADNI_DeepLearning johnca$ conda list 
# packages in environment at /Users/johnca/miniconda3/envs/ADNI: 
# 

(ADNI) MLG-BH0039:ADNI_DeepLearning johnca$ 

Das gibt mir den Eindruck, dass die Umwelt keine Pakete hat in sie geladen . Ist das richtig? Wenn ja, wie kann ich das Skript so ändern, dass die gewünschten Pakete erfolgreich in der angegebenen Umgebung installiert werden?

Danke!

+0

Erste Last/aktivieren die neu erstellte Conda Umgebung installieren dann 'med2image' pip –

+0

@AafaqueAbdullah mit, dass ich zunächst versucht, den Code mit: ' # Last Umgebung Quelle ADNI # Installieren Bildverarbeitungs-Software aktivieren pip installieren med2image' Aber es hat nicht funktioniert. –

+0

Was meinst du mit "es hat nicht funktioniert"? – darthbith

Antwort

0

Ich habe eine bessere Möglichkeit gefunden, diesen Prozess zu automatisieren, indem ich eine environment.yml-Datei mit allen gewünschten Paketen erstellt habe. Dies kann auch Pip-Pakete beinhalten. Meine Datei sieht wie folgt aus:

name: ADNI 
channels: 
- soumith 
- defaults 
dependencies: 
- ca-certificates=2017.08.26=h1d4fec5_0 
- certifi=2017.11.5=py36hf29ccca_0 
- cffi=1.11.2=py36h2825082_0 
- freetype=2.8=hab7d2ae_1 
- intel-openmp=2018.0.0=hc7b2577_8 
- jpeg=9b=h024ee3a_2 
- libffi=3.2.1=hd88cf55_4 
- libgcc=7.2.0=h69d50b8_2 
- libgcc-ng=7.2.0=h7cc24e2_2 
- libgfortran-ng=7.2.0=h9f7466a_2 
- libpng=1.6.32=hbd3595f_4 
- libstdcxx-ng=7.2.0=h7a57d05_2 
- libtiff=4.0.9=h28f6b97_0 
- mkl=2018.0.1=h19d6760_4 
- numpy=1.13.3=py36ha12f23b_0 
- olefile=0.44=py36h79f9f78_0 
- openssl=1.0.2n=hb7f436b_0 
- pillow=4.2.1=py36h9119f52_0 
- pip=9.0.1=py36h6c6f9ce_4 
- pycparser=2.18=py36hf9f622e_1 
- python=3.6.0=0 
- readline=6.2=2 
- scipy=1.0.0=py36hbf646e7_0 
- setuptools=36.5.0=py36he42e2e1_0 
- six=1.11.0=py36h372c433_1 
- sqlite=3.13.0=0 
- tk=8.5.18=0 
- wheel=0.30.0=py36hfd4bba0_1 
- xz=5.2.3=h55aa19d_2 
- zlib=1.2.11=ha838bed_2 
- pytorch=0.2.0=py36hf0d2509_4cu75 
- torchvision=0.1.9=py36h7584368_1 
- pip: 
    - cycler==0.10.0 

dann kann ich automatisieren die Umgebung zu schaffen durch Bezugnahme auf diese Datei, wie in:

#!/bin/bash 

# Load anaconda 
module load Anaconda/4.2.0 

# Create environment 
conda env create -f adni_env.yml 

echo ' ' 
echo 'A working environment named ADNI has been created or updated.' 
echo 'If working on the cadillac server please `module load Anaconda/4.2.0`.' 
echo 'Then run `source activate ADNI` to work within the environment.' 
echo ' ' 

Ich hoffe, das jemand in der Zukunft helfen können, die ähnliche Probleme haben.

0

Der Befehl

conda create -n ADNI 

schafft eine Umgebung, ohne Pakete installiert, nicht einmal Python oder Pip. Daher verwenden Sie trotz Aktivierung der Umgebung immer noch einen anderen Pip, der auf Ihrem PATH angezeigt wird. Sie müssen zuerst pip oder Python in die Umgebung installieren, wenn entweder die Umwelt oder danach mit dem conda install Befehl erstellt wird

conda create -n ADNI python=3.6 

wird Python installieren, die entlang pip bringt, wenn die Umgebung erstellt oder

conda create -n ADNI 
conda install -n ADNI python=3.6 

wird danach Python installieren.

Im besten Fall würden Sie mit conda dieses Paket installieren. Es ist gar nicht so schwer, ein Conda-Paket aus einem Pip-Paket zu erstellen und es auf einen Kanal auf Anaconda.org hochzuladen, damit dein Team darauf zugreifen kann.

+0

Ich habe meinen Aufruf an 'conda create -n ADNI python = 3.6' angepasst, aber ich bekomme immer noch eine leere Liste von Paketen, wenn ich 'conda list' in meiner ADNI-Umgebung sehe. –

+0

Ich bin nicht sicher, warum das passieren würde, und ich kann dieses Verhalten hier nicht reproduzieren ... für mich fügt der Befehl create Python und eine Reihe von Abhängigkeiten hinzu, die der Befehl list anzeigt. Welche Ausgabe wird angezeigt, wenn Sie die Umgebung erstellen? – darthbith

+0

danke für die Hilfe. Es ist mir gelungen, eine Lösung zu finden, die nicht unbedingt eine vollständige Lösung darstellt. Ich werde es als eine Lösung unten veröffentlichen, falls zukünftige Benutzer ähnliche Probleme haben. –

Verwandte Themen