Mon projet python fonctionne sur un environnement virtuel conda. J'installe des packages sur l'environnement avec conda install
chaque fois que ce package est disponible pour l'installation de cette façon, sinon, je l'installe avec pip install
.
Pour faciliter l'installation du projet pour les autres développeurs, j'exporte la liste des packages utilisés dans l'environnement conda vers un fichier: conda env export > conda_environment_export.yml
.
Cependant, depuis un certain temps, l'exportation de packages ne contient plus les packages installés par pip.
Que puis-je faire pour que les packages pip réapparaissent dans l'exportation?
Mon fichier d'export conda tel qu'il était il y a quelques semaines:
name: sensor_gateway
channels:
- defaults
dependencies:
- aiohttp=2.3.9=py36_0
- async-timeout=2.0.0=py36hc3e01a3_0
- certifi=2018.1.18=py36_0
- chardet=3.0.4=py36h420ce6e_1
- jinja2=2.10=py36h292fed1_0
- markupsafe=1.0=py36h0e26971_1
- multidict=3.3.2=py36h72bac45_0
- pip=9.0.1=py36h226ae91_4
- pymysql=0.7.11=py36hf59f3ba_0
- python=3.6.4=h6538335_1
- pytz=2018.3=py36_0
- setuptools=38.4.0=py36_0
- sqlalchemy=1.2.1=py36hfa6e2cd_0
- vc=14=h0510ff6_3
- vs2015_runtime=14.0.25123=3
- wheel=0.30.0=py36h6c3ec14_1
- wincertstore=0.2=py36h7fe50ca_0
- yarl=0.14.2=py36h27d1bf2_0
- pip:
- aiohttp-jinja2==0.16.0
- aiomysql==0.0.12
- attrs==17.4.0
- idna==2.6
- idna-ssl==1.0.0
- python-mimeparse==1.6.0
prefix: C:\ProgramData\Anaconda3\envs\sensor_gateway
L'exportation de conda maintenant:
name: sensor_gateway
channels:
- defaults
dependencies:
- aiohttp=2.3.9=py36_0
- async-timeout=2.0.0=py36hc3e01a3_0
- certifi=2018.4.16=py36_0
- chardet=3.0.4=py36h420ce6e_1
- icc_rt=2017.0.4=h97af966_0
- intel-openmp=2018.0.0=8
- jinja2=2.10=py36h292fed1_0
- markupsafe=1.0=py36h0e26971_1
- mkl=2018.0.2=1
- mkl_fft=1.0.1=py36h452e1ab_0
- mkl_random=1.0.1=py36h9258bd6_0
- multidict=3.3.2=py36h72bac45_0
- numpy=1.14.2=py36h5c71026_1
- pip=9.0.1=py36h226ae91_4
- pymysql=0.7.11=py36hf59f3ba_0
- python=3.6.4=h6538335_1
- pytz=2018.3=py36_0
- setuptools=38.4.0=py36_0
- simplejson=3.14.0=py36hfa6e2cd_0
- sqlalchemy=1.2.1=py36hfa6e2cd_0
- vc=14=h0510ff6_3
- vs2015_runtime=14.0.25123=3
- wheel=0.30.0=py36h6c3ec14_1
- wincertstore=0.2=py36h7fe50ca_0
- yarl=0.14.2=py36h27d1bf2_0
prefix: C:\ProgramData\Anaconda3\envs\sensor_gateway
Je soupçonne que la mise à jour de la version de conda (4.4.10-py36_0
-> 4.5.2-py36_0
) peut avoir causé ce problème sur ce projet. Sur un autre projet, j'ai le même problème, mais là j'ai mis à jour pip (9.0.1-py36h226ae91_4
-> 10.0.1-py36_0
). Même après être revenu au pip 9.0.1, le problème persiste. Mes soupçons sont-ils corrects? Et que puis-je faire pour résoudre ce problème à nouveau?
MISE À JOUR:
La seule réponse proposée pour le moment est liée à cette question et cela ne semble pas résoudre mon problème:
1. Sur un terminal de commande Windows, ouvert en tant qu'administrateur:
where pip
sortie (where
comme commande équivalente à Windows à which
sous unix/linux):
C:\ProgramData\Anaconda3\Scripts\pip.exe
C:\Users\Sander\AppData\Local\Programs\Python\Python36\Scripts\pip.exe
pip freeze
sortie:
Répertorie tous les packages que j'ai jamais installés sur mon 'normal' python (= tout installé par défaut, pas à l'intérieur d'environnements virtuels dédiés). La liste des packages est trop longue pour être incluse ici.
2. Sur un terminal de commande Windows, ouvert avec des privilèges d'administrateur et après avoir exécuté activate sensor_gateway
:
where pip
sortie:
C:\ProgramData\Anaconda3\envs\sensor_gateway\Scripts\pip.exe
C:\ProgramData\Anaconda3\Scripts\pip.exe
C:\Users\Sander\AppData\Local\Programs\Python\Python36\Scripts\pip.exe
pip freeze
sortie:
répertorie tous les packages installés avec pip sur mon environnement correctement.
Il semble donc que lorsque mon environnement virtuel est activé, il y a un pip installé dans cet environnement, et il doit être ça pip qui retourne la liste des packages installés à la demande, pas une autre installation pip , car la liste des packages pip sur l'environnement est correcte.
J'ai pu résoudre ce problème simplement en l'exécutant dans une fenêtre de commande avec des privilèges d'administrateur:
activate <env-name>
conda update pip
Après cela, les exportations des packages disponibles sur mon environnement contiennent à nouveau à la fois les packages installés avec conda et ceux avec pip.
Je soupçonne que j'ai peut-être causé ce problème d'exportation de package parce que j'avais suivi les instructions données par pip plus tôt, lors de l'exécution d'une installation de package:
"Vous utilisez la version 9.0.3 de pip, mais la version 10.0.1 est disponible. Vous devriez envisager la mise à niveau via la commande 'python -m pip install --upgrade pip'>."
Donc, la mise à jour avec python -m pip install --upgrade pip
a interrompu les exportations de mon package, mais conda update pip
l'a corrigé.
Pour moi, cela n'est apparu qu'en utilisant le package conda pip 18.1_py36_0 (n'a pas essayé d'autres versions). J'ai donc rétrogradé pip dans l'environnement virtuel à la version 10 via
conda install pip=10
Après cela, l'exportation listait à nouveau les packages pip.
Consultez également cette demande d'extraction pour conda https://github.com/conda/conda/pull/7612 qui résout le problème de conda 4.6.2. Il a également été rétroporté en conda 4.5.10. Actuellement, il n'y a pas de backport conda 4.4.x.
Au moment de la rédaction de cet article, en raison d'un problème de lecture des listes de pip par anaconda, la commande conda export exporte uniquement les packages installés via conda install packagename
et ignore les pip.
Vous pouvez essayer de réinstaller vos packages via conda install
et voir s'il génère correctement le fichier environment.yml.
Si vous avez installé pip
avec anaconda
et l'avez utilisé pour installer les packages, alors conda-env
le fait automatiquement.
Donc, fondamentalement, vous pouvez exporter votre environnement avec
conda env export -n <env-name> > environment.yml
Autrement
Veuillez vous référer à cela lien