Bonjour, je me sers généralement de conda pour gérer mes environnements, mais je suis maintenant sur un projet qui nécessite un peu plus de puissance que mon ordinateur portable. J'essaie donc d'utiliser les stations de travail de mon université équipées de nouveaux processeurs Intel Xeons. Mais je n'ai pas de droits d'administrateur et le poste de travail n'a pas de conda, je suis donc obligé de travailler avec virtualenv et pip3.
Comment générer un requirements.txt
de conda qui fonctionnera avec pip3
et venv
?
conda list -e > requirements.txt
ne génère pas de fichier compatible:
= is not a valid operator. Did you mean == ?
La sortie conda
est:
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-64
certifi=2016.2.28=py36_0
cycler=0.10.0=py36_0
freetype=2.5.5=2
icu=54.1=0
libpng=1.6.30=1
matplotlib=2.0.2=np113py36_0
mkl=2017.0.3=0
numpy=1.13.1=py36_0
openssl=1.0.2l=0
pip=9.0.1=py36_1
pyparsing=2.2.0=py36_0
pyqt=5.6.0=py36_2
python=3.6.2=0
python-dateutil=2.6.1=py36_0
pytz=2017.2=py36_0
qt=5.6.2=2
readline=6.2=2
scikit-learn=0.19.0=np113py36_0
scipy=0.19.1=np113py36_0
setuptools=36.4.0=py36_1
sip=4.18=py36_0
six=1.10.0=py36_0
sqlite=3.13.0=0
tk=8.5.18=0
wheel=0.29.0=py36_0
xz=5.2.3=0
zlib=1.2.11=0
Je pensais que je changerais simplement tous les =
à ==
mais il y a deux =
dans la sortie conda. Lequel changer? Il y a sûrement un moyen plus facile?
MODIFIER: pip freeze > requirements.txt
donne:
certifi==2016.2.28
cycler==0.10.0
matplotlib==2.0.2
matplotlib-venn==0.11.5
numpy==1.13.1
pyparsing==2.2.0
python-dateutil==2.6.1
pytz==2017.2
scikit-learn==0.19.0
scipy==0.19.1
six==1.10.0
Après la discussion, je voudrais mentionner que vous pouvez réellement voir une séparation des rôles pip
et conda
.
pip
est un gestionnaire de paquets standard, il fait une chose et le fait bien. requirements.txt
peut être généré dans un environnement et installé par pip
dans un nouvel environnement.
Maintenant, il y a conda
résultat: vous capturez à juste titre leur commentaire qui dit 'nous avons généré cette liste de bibliothèques pour travailler avec conda' . Notez que python lui-même est dans la liste des conda et pas (correctement) dans requirements.txt
. conda
réplique sa propre installation, c'est pourquoi sa liste de bibliothèques est plus longue et a python lui-même.
pip
produit une liste de paquets qui ont été installés en plus de la bibliothèque standard pour que le paquet que vous avez écrit fonctionne. J'espère que cela aide à faire la distinction entre les deux.
De plus, pipenv est un outil plus récent, capable de gérer à la fois l’environnement virtuel et la gestion des paquets.
Juste au cas où quelqu'un cherche à générer des exigences.txt à partir d'un projet existant dans conda, utilisez la commande suivante
Accédez à l'environnement de votre projet conda activate <env_name>
conda list
vous donne la liste des paquets utilisés pour l'environnement
conda list -e > requirements.txt
enregistre toutes les informations sur les paquets dans votre dossier
conda env export > <env_name>.yml
pip freeze
Comme l'indique le commentaire en haut, la sortie de
conda list -e > requirements.txt
peut être utilisé pour créer un environnement virtuel conda
avec
conda create --name <env> --file requirements.txt
mais cette sortie n'est pas au bon format pour pip
.
Si vous voulez un fichier que vous pouvez utiliser pour créer un environnement virtuel pip
(c'est-à-dire un requirements.txt
au bon format) vous pouvez installer pip
dans l’environnement conda
, l’utilisation de pip pour créer requirements.txt
.
conda activate <env>
conda install pip
pip freeze > requirements.txt
Puis utilisez le résultat requirements.txt
pour créer un environnement virtuel pip
:
python3 -m venv env
source env/bin/activate
pip install -r requirements.txt
Lorsque j'ai testé cela, les packages n'étaient pas identiques dans les sorties (pip
incluaient moins de packages), mais cela suffisait pour configurer un environnement fonctionnel.