web-dev-qa-db-fra.com

Installez uniquement les packages disponibles en utilisant "conda install --yes --file requirements.txt" sans erreur

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.

63
cdeepakroy

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"

119
Till Hoffmann

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
8
Pbms

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
1
Yuri-M-Dias

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:

https://www.anaconda.com/using-pip-in-a-conda-environment/

0
MarredCheese