Lors de l’installation des packages dans exigences.txt avec Conda via la commande suivante
conda install --yes --file requirements.txt
Si un package dans Requirements.txt n'est pas disponible, il génère une erreur "Aucune erreur", telle que celle illustrée ci-dessous:
Utilisation du site api Anaconda Cloud https://api.anaconda.org
Récupération des métadonnées du paquet: ....
Erreur: Aucun paquet trouvé dans les canaux linux-64 actuels ne correspond à: nimfa == 1.2.3
Vous pouvez rechercher ce paquet sur anaconda.org avec
anaconda search -t conda nimfa ==1.2.3
Au lieu de générer une erreur, est-il possible de modifier ce comportement de manière à ce qu'il installe tous les packages disponibles dans requirements.txt et génère un avertissement pour ceux qui ne sont pas disponibles?
Je voudrais ceci parce que, le paquet nimfa dont l’erreur dit n’est pas disponible, peut être installé par pip. Donc, si je peux changer le comportement de conda install --yes --file requirements.txt
simplement lancer un avertissement pour les paquets indisponibles, je peux le suivre avec la commande pip install -r requirments.txt
dans .travis.yml afin que TravisCI tente de l’installer à partir de l’endroit où il est disponible.
J'ai fini par parcourir les lignes du fichier
$ while read requirement; do conda install --yes $requirement; done < requirements.txt
Edit : Si vous souhaitez installer un package à l'aide de pip s'il n'est pas disponible via conda, essayez ceci:
$ while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt
Modifier : Si vous utilisez Windows (le crédit passe à @ Clay ):
$ FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"
Vous pouvez le faire comme mentionné dans this
Exporter vers un fichier .yml
conda env export > freeze.yml
Reproduire:
conda env create -f freeze.yml
Pour ceux qui cherchaient, je l’utilisais comme solution de @TillHoffmann pour le poisson Shell:
$ while read requirement; conda install --yes $requirement; end < requirements.txt
Et
$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt
La réponse de Pbms ici est la bonne façon de le faire, en supposant que vous ayez un environnement existant sur lequel copier. Conda est tout à fait capable d'installer à la fois les packages Conda et les packages pip, comme indiqué dans la section environment.yml
. Je voulais documenter l'ensemble du processus plus en détail. Notez que j'utilise des environnements basés sur des dossiers. C'est pourquoi j'ai ajouté --prefix [path to environment folder]
à la plupart des commandes.
Supposons que vous avez installé un environnement pour un projet existant dans un dossier appelé env
dans le dossier actuel, comme ceci:
conda create --prefix ./env
Vous généreriez environment.yml
pour l'environnement de ce projet comme ceci:
conda env export --prefix ./env > environment.yml
Vous créez un nouvel environnement dans un autre dossier en copiant environment.yml
à là-bas et puis en cours d'exécution à partir de là:
conda env create --prefix ./env --file environment.yml
Vous obtiendrez un environnement déjà existant pour correspondre à environment.yml
en copiant une nouvelle fois environment.yml
à là-bas et puis en cours d'exécution à partir de là:
conda env update --prefix ./env --file environment.yml --Prune
Lorsque l'environnement en question est actif, vous devez vérifier l'état de ses packages comme suit:
conda list
Ceci est une version abrégée de ce que cette commande pourrait imprimer (notez que les packages pip sont marqués pypi
):
# Name Version Build Channel
pip 19.2.2 py37_0
python 3.7.4 h5263a28_0
numpy 1.16.4 py37h19fb1c0_0
pandas 0.25.1 py37ha925a31_0
pyodbc 4.0.27 py37ha925a31_0
ibm-db 3.0.1 pypi_0 pypi
ibm-db-sa 0.3.5 pypi_0 pypi
Enfin, ceci est une version abrégée de ce que environment.yml
pourrait ressembler à (notez que les paquets pip sont listés dans leur propre catégorie):
dependencies:
- pip=19.2.2=py37_0
- python=3.7.4=h5263a28_0
- numpy=1.16.4=py37h19fb1c0_0
- pandas=0.25.1=py37ha925a31_0
- pyodbc=4.0.27=py37ha925a31_0
- pip:
- ibm-db==3.0.1
- ibm-db-sa==0.3.5
Sachez que l’utilisation conjointe de Conda et de pip peut provoquer des brûlures d’estomac car elles peuvent, sans le savoir, se débarrasser des dépendances les unes des autres. Vous êtes censé installer tous vos packages Conda en premier, puis tous vos packages pip par la suite, plutôt que d'alterner entre les deux. Si votre environnement tombe en panne, la recommandation officielle est de le supprimer et de le recréer (à partir de votre environment.yml
fichier). Pour plus de détails, voir ce guide: