J'ai installé et j'utilise la distribution Anaconda Python, et j'ai commencé à utiliser l'environnement Anaconda (Conda). Je peux utiliser la commande standard conda install...
pour placer les packages de la distribution dans mes environnements, mais pour utiliser tout ce qui se trouve à l'extérieur (par exemple, Flask-WTF, flask-sqlalchemy et alembic), il est nécessaire d'utiliser pip install
dans le dossier environnement actif. Cependant, lorsque je regarde le contenu de l'environnement, que ce soit dans le répertoire ou en utilisant conda list
, ces packages pip install
ed n'apparaissent pas.
Utiliser pip freeze
et pip list
ne répertorie que tous les paquetages que j'ai jamais installés.
Existe-t-il un moyen de garder trace de ce qui se trouve dans chacun de mes Anaconda env
s (_ pip
et conda
installés)?
conda-env le fait maintenant automatiquement (si pip a été installé avec conda).
Vous pouvez voir comment cela fonctionne en utilisant l'outil d'exportation utilisé pour la migration d'un environnement:
conda env export -n <env-name> > environment.yml
Le fichier listera les paquets conda et les paquets pip:
name: stats
channels:
- javascript
dependencies:
- python=3.4
- bokeh=0.9.2
- numpy=1.9.*
- nodejs=0.10.*
- flask
- pip:
- Flask-Testing
Si vous souhaitez exporter l'exportation de l'environnement, déplacez environment.yml
vers le nouvel ordinateur hôte et exécutez:
conda env create -f path/to/environment.yml
conda
gardera uniquement une trace des paquets qu'il a installés. Et pip
vous donnera les paquets qui ont été installés à l’aide du programme d’installation pip
ou bien ils ont utilisé setuptools
dans leur setup.py
de sorte que conda build a généré les informations Egg. Donc, vous avez essentiellement trois options.
Vous pouvez combiner les éléments conda list
et pip freeze
et gérer les packages installés à l'aide de conda
(qui s'affiche dans conda list
) avec le gestionnaire de packages conda
. et ceux installés avec pip
(qui apparaissent dans pip freeze
mais pas dans conda list
) avec pip
.
Installez dans votre environnement uniquement les packages python
, pip
et distribute
et gérez le tout avec pip
. (Ce n'est pas si trivial si vous êtes sur Windows ...)
Construisez vos propres packages conda
et gérez le tout avec conda
.
Personnellement, je recommanderais la troisième option car il est très facile de construire des packages conda
. Il existe un répertoire git d'exemples de recettes sur le compte github du continuum. Mais cela revient généralement à:
conda skeleton pypi PACKAGE
conda build PACKAGE
ou juste:
conda pipbuild PACKAGE
De plus, lorsque vous les avez construits une fois, vous pouvez les télécharger sur https://binstar.org/ et les installer à partir de là.
Ensuite, vous aurez tout géré avec conda
.
Il existe une branche de conda (new-pypi-install) qui ajoute une meilleure intégration à pip et PyPI. En particulier, conda list montrera également les paquets installés par pip et conda install essaiera d’abord de trouver un paquet conda, faute de quoi pip utilisera pip pour l’installer.
Cette branche devrait être fusionnée plus tard cette semaine afin que la version 2.1 de conda bénéficie d’une meilleure intégration pip avec conda.
J'ai suivi la réponse de @Viktor Kerkez et j'ai connu un succès mitigé. J'ai trouvé que parfois cette recette de
conda squelette pypi FORFAIT
conda build FORFAIT
ressemblerait à tout ce qui a fonctionné mais je ne pouvais pas importer avec succès PACKAGE. Récemment, j'ai posé une question à ce sujet sur le groupe d'utilisateurs d'Anaconda et j'ai entendu @ Travis Oliphant lui-même sur la meilleure façon d'utiliser conda pour créer et gérer des paquets qui ne sont pas livrés avec Anaconda. Vous pouvez lire ce fil ici , mais je décrirai l'approche ci-dessous pour que les réponses à la question du PO soient plus complètes, espérons-le ...
Exemple: je vais installer l'excellent paquetage prettyplotlib sous Windows avec conda 2.2.5.
1a) conda build --build-recipe prettyplotlib
Vous verrez que les messages de construction ont tous une belle apparence jusqu'à la dernière section TEST de la construction. J'ai vu cette erreur
Fichier "C:\Anaconda\conda-bld\test-rép_tmp\run_test.py", ligne 23 importation Aucune SyntaxError: impossible d'affecter à Aucune TESTS FAILE: prettyplotlib-0.1.3-py27_0
1b) Allez dans/conda-recipes/prettyplotlib et éditez le fichier meta.yaml. Actuellement, les packages configurés comme à l'étape 1a génèrent des fichiers yaml qui comportent une erreur dans la section test
. Par exemple, voici comment le mien a cherché prettyplotlib
test: # Python imports imports:
-
- prettyplotlib
- prettyplotlib
Modifiez cette section pour supprimer la ligne vierge précédée de - et également pour supprimer la ligne prettyplotlib redondante. Au moment de la rédaction de ce document, j’ai constaté que je devais éditer la plupart des fichiers meta.yaml de ce type pour les packages externes que j’installais avec conda, ce qui signifie qu’il existe une ligne d’importation vierge à l'origine de l'erreur ainsi qu'une importation redondante du package donné. .
1c) Relancez la commande de 1a, qui devrait se terminer sans erreur cette fois. À la fin de la construction, il vous sera demandé si vous souhaitez télécharger la version sur binstar . Je suis entré non et puis vu ce message:
Si vous souhaitez télécharger ce package sur binstar.org ultérieurement, tapez:
$ binstar upload C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2
Ce fichier tar.bz2 est la version que vous devez maintenant installer.
2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2
En suivant ces étapes, j'ai utilisé avec succès conda pour installer un certain nombre de paquets qui ne sont pas fournis avec Anaconda. Auparavant, j'avais déjà installé certains d'entre eux à l'aide de pip. J'avais donc pip uninstall PACKAGE
avant d'installer PACKAGE avec conda. Avec conda, je peux maintenant gérer (presque) tous mes paquets avec une seule approche plutôt que d’avoir un mélange de choses installées avec conda, pip, easy_install et python setup.py install.
Pour le contexte, je pense que ceci article de blog récent par @Travis Oliphant sera utile pour les gens comme moi qui n'apprécient pas tout ce qui est contenu dans un emballage robuste Python, mais qui apprécie certainement quand ça " fonctionne juste ". conda semble être un bon moyen d'avancer ...
C'est pourquoi j'ai écrit Picky: http://picky.readthedocs.io/
C'est un paquetage python qui suit les paquets installés avec pip ou conda dans virtualenvs et conda envs.
Je pense que ce qui manque ici, c'est que lorsque vous le faites:
>pip install .
pour installer un paquet local avec setup.py, il installe un paquet visible par tous les envs conda qui utilisent la même version de python. Notez que j'utilise la version conda de pip!
par exemple, si j'utilise python2.7, le paquet local est placé ici:
/usr/local/anaconda/lib/python2.7/site-packages
Si je crée ensuite un nouveau conda env avec python = 2.7 (= par défaut):
>conda create --name new
>source activate new
Et ensuite faire:
(new)>conda list // empty - conda is not aware of any packages yet
Cependant, si je le fais:
(new)>pip list // the local package installed above is present
Ainsi, dans ce cas, conda ne connaît pas le paquet pip, mais le paquet est disponible pour python.
Cependant, si j'installe plutôt le paquet local (encore une fois en utilisant pip) après j'ai créé (et activé) le nouveau conda env, maintenant conda le voit:
(new)>conda list // sees that the package is there and was installed by pip
Je pense donc que l’interaction entre conda et pip pose certains problèmes - c’est-à-dire que l’utilisation de pip pour installer un paquet local à partir d’un conda env rend ce paquet disponible (mais non visible via conda list) à tous les autres envois de conda du même python version.
conda env export
répertorie tous les packages conda et pip dans un environnement. conda-env
doit être installé dans le répertoire racine (conda install -c conda conda-env
).
Pour écrire un fichier environment.yml
décrivant l'environnement actuel:
conda env export > environment.yml
Références:
Je préfixe généralement le dossier 'bin/pip' pour l'environnement spécifique dans lequel vous souhaitez installer le paquet avant la commande 'pip'. Par exemple, si vous souhaitez installer pymc3 dans l’environnement py34, vous devez utiliser cette commande:
~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3
En gros, vous devez simplement trouver le bon chemin vers le dossier 'bin/pip' de votre environnement et le placer avant la commande d'installation.
Vous pouvez commencer par installer la commande donnée ci-dessous dans l'environnement conda:
conda install pip
Suivi de l'installation de tous les packages pip dont vous avez besoin dans l'environnement.
Après avoir installé tous les packages conda et pip pour exporter l'environnement, utilisez:
conda env export -n <env-name> > environment.yml
Cela créera le fichier requis dans le dossier.
Mon which pip
montre le chemin suivant:
$ which pip
/home/kmario23/anaconda3/bin/pip
Ainsi, quel que soit le paquet que j'installe avec pip install <package-name>
, il devra être reflété dans la liste des paquetages lorsque celle-ci sera exportée en utilisant:
$ conda list --export > conda_list.txt
Mais je ne le fais pas. Donc, au lieu de cela, j'ai utilisé la commande suivante comme suggéré par plusieurs autres:
# get environment name by
$ conda-env list
# get list of all installed packages by (conda, pip, etc.,)
$ conda-env export -n <my-environment-name> > all_packages.yml
# if you haven't created any specific env, then just use 'root'
Maintenant, je peux voir tous les paquets dans mon fichier all-packages.yml
.