Créer un environnement conda: "Conflits trouvés!" lors de la résolution de l'environnement et de la recherche du chemin de conflit le plus court

12

On m'a fourni un environment.ubuntu.ymlfichier pour pouvoir créer un environnement conda. Cependant, en cours d'exécution, conda create env --file environment.ubuntu.ymlj'obtiens la sortie suivante:

conda env create --file environment.ubuntu.yml
Collecting package metadata (repodata.json): done
Solving environment: - 
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
Examining fontconfig:   5%|▉                 | 10/202 [00:00<00:00, 5393.91it/ ]
Comparing specs that have this dependency:   0%|         | 0/12 [00:00<?, ?it/s]
Finding shortest confli|  path for fontconfig==2.13.1=he4413a7_1000:  12%|▏| 1/8
Finding shortest conflict path for fontconfig==2.13.1=he4413a7_1000:  25%|▎| 2/8
Finding shortest conflict pa/  for fontconfig[version='>=2.13.0,<3.0a0']:  25%|
Finding shortest conflict path for fontconfig[version='>=2.13.0,<3.0a0']:  38%|
Finding shortest conf- ct path for fontconfig[version='>=2.11.1']:  38%|▍| 3/8 [
Finding shortest conflict path for fontconfig[version='>=2.11.1']:  50%|▌| 4/8 [
Finding shortest conflict pa|  for fontconfig[version='>=2.12.4,<3.0a0']:  50%|
...

Le Finding shortest conflict pathse poursuit pendant longtemps - apparemment , il tente de résoudre certains problèmes de dépendance. Fonctionnant pendant 2 heures, il n'est pas clair s'il s'arrêtera jamais.

Ma question est: que se passe-t-il ici et puis-je en quelque sorte accélérer manuellement ce processus, par exemple en supprimant les dépendances inutiles? Comme je n'ai pas créé l'environnement, je ne sais pas lesquels sont réellement nécessaires.

La raison pour laquelle je suis curieux est qu'il vérifie les chemins de conflit comme fontconfig[version='>=2.12.6,<3.0a0']lorsque celui-ci se dependenciestrouve 2.13.1et que je l'ai installé via2.13.1

Veuillez trouver ci-dessous le fichier .yml pour référence.

name: cea
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - dlr-sc
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - conda-forge
  - conda-forge/label/gcc7
  - defaults
dependencies:
  - attrs=19.1.0=py_0
  - backports=1.0=py_2
  - backports.functools_lru_cache=1.5=py_1
  - backports_abc=0.5=py_1
  - boost-cpp=1.68.0=h11c811c_1000
  - bzip2=1.0.6=h14c3975_1002
  - ca-certificates=2019.3.9=hecc5488_0
  - cairo=1.14.12=h80bd089_1005
  - certifi=2019.3.9=py27_0
  - click=7.0=py_0
  - click-plugins=1.0.4=py_0
  - cligj=0.5.0=py_0
  - curl=7.64.1=hf8cf82a_0
  - cycler=0.10.0=py_1
  - descartes=1.1.0=py_2
  - enum34=1.1.6=py27_1001
  - expat=2.2.5=hf484d3e_1002
  - fiona=1.8.6=py27hf242f0b_2
  - fontconfig=2.13.1=he4413a7_1000
  - freetype=2.10.0=he983fc9_0
  - freexl=1.0.5=h14c3975_1002
  - functools32=3.2.3.2=py_3
  - futures=3.2.0=py27_1000
  - gdal=2.4.1=py27h5f563d9_8
  - geopandas=0.4.1=py_1
  - geos=3.7.1=hf484d3e_1000
  - geotiff=1.4.3=h1105359_1000
  - gettext=0.19.8.1=hc5be6a0_1002
  - giflib=5.1.7=h516909a_1
  - glib=2.56.2=had28632_1001
  - hdf4=4.2.13=h9a582f1_1002
  - hdf5=1.10.4=nompi_h3c11f04_1106
  - icu=58.2=hf484d3e_1000
  - jpeg=9c=h14c3975_1001
  - json-c=0.13.1=h14c3975_1001
  - kealib=1.4.10=h1978553_1003
  - kiwisolver=1.0.1=py27h6bb024c_1002
  - krb5=1.16.3=h05b26f9_1001
  - libblas=3.8.0=4_openblas
  - libcblas=3.8.0=4_openblas
  - libcurl=7.64.1=hda55be3_0
  - libdap4=3.19.1=hd48c02d_1000
  - libedit=3.1.20170329=hf8c457e_1001
  - libffi=3.2.1=he1b5a44_1006
  - libgdal=2.4.1=heae24aa_8
  - libiconv=1.15=h516909a_1005
  - libkml=1.3.0=h328b03d_1009
  - liblapack=3.8.0=4_openblas
  - libnetcdf=4.6.2=hbdf4f91_1001
  - libpng=1.6.36=h84994c4_1000
  - libpq=11.2=h4770945_0
  - libspatialindex=1.9.0=he1b5a44_0
  - libspatialite=4.3.0a=hb5ec416_1026
  - libssh2=1.8.2=h22169c7_2
  - libtiff=4.0.10=h648cc4a_1001
  - libuuid=2.32.1=h14c3975_1000
  - libxcb=1.13=h14c3975_1002
  - libxml2=2.9.8=h143f9aa_1005
  - mapclassify=1.0.1=py27_1
  - matplotlib=2.2.3=py27h8a2030e_1
  - matplotlib-base=2.2.3=py27h60b886d_1
  - munch=2.3.2=py_0
  - ncurses=6.1=hf484d3e_1002
  - numpy=1.16.2=py27h8b7e671_1
  - openblas=0.3.5=h9ac9557_1001
  - openjpeg=2.3.0=hf38bd82_1003
  - openssl=1.1.1b=h14c3975_1
  - pandas=0.24.2=py27hf484d3e_0
  - pip=19.0.3=py27_0
  - pixman=0.34.0=h14c3975_1003
  - poppler=0.67.0=h2fc8fa2_1002
  - poppler-data=0.4.9=1
  - postgresql=11.2=h61314c7_0
  - proj4=5.2.0=h14c3975_1001
  - pthread-stubs=0.4=h14c3975_1001
  - pyparsing=2.3.1=py_0
  - pyproj=1.9.6=py27hc0953d3_1000
  - pyqt=5.6.0=py27h13b7fb3_1008
  - python=2.7.15=h721da81_1008
  - python-dateutil=2.8.0=py_0
  - pytz=2018.9=py_0
  - readline=7.0=hf8c457e_1001
  - rtree=0.8.3=py27h666c49c_1002
  - scipy=1.2.1=py27h09a28d5_1
  - setuptools=40.8.0=py27_0
  - shapely=1.6.4=py27h2afed24_1003
  - singledispatch=3.4.0.3=py27_1000
  - sip=4.18.1=py27hf484d3e_1000
  - six=1.12.0=py27_1000
  - sqlite=3.26.0=h67949de_1001
  - subprocess32=3.5.3=py27h14c3975_0
  - tbb=2019.5=hc9558a2_0
  - tk=8.6.9=h84994c4_1001
  - tornado=5.1.1=py27h14c3975_1000
  - tzcode=2018g=h14c3975_1001
  - wheel=0.33.1=py27_0
  - xerces-c=3.2.2=hac72e42_1001
  - xorg-kbproto=1.0.7=h14c3975_1002
  - xorg-libice=1.0.9=h516909a_1004
  - xorg-libsm=1.2.3=h84519dc_1000
  - xorg-libx11=1.6.7=h14c3975_1000
  - xorg-libxau=1.0.9=h14c3975_0
  - xorg-libxdmcp=1.1.3=h516909a_0
  - xorg-libxext=1.3.4=h516909a_0
  - xorg-libxrender=0.9.10=h516909a_1002
  - xorg-renderproto=0.11.1=h14c3975_1002
  - xorg-xextproto=7.3.0=h14c3975_1002
  - xorg-xproto=7.0.31=h14c3975_1007
  - xz=5.2.4=h14c3975_1001
  - zlib=1.2.11=h14c3975_1004
  - freeimageplus=3.18.0=hf484d3e_2
  - gl2ps=1.3.8=h14c3975_4
  - oce=0.17.2=h6bb024c_10
  - pythonocc-core=0.17=py27_1
  - mkl=2017.0.3=0
  - mkl-service=1.1.2=py27_3
  - dbus=1.13.2=h714fa37_1
  - gst-plugins-base=1.14.0=hbbd80ab_1
  - gstreamer=1.14.0=hb453b48_1
  - libgcc-ng=8.2.0=hdf63c60_1
  - libgfortran-ng=7.3.0=hdf63c60_0
  - libstdcxx-ng=8.2.0=hdf63c60_1
  - pcre=8.43=he6710b0_0
  - qt=5.6.3=h8bf5577_3
  - pip:
    - alabaster==0.7.12
    - babel==2.6.0
    - backports.shutil-get-terminal-size==1.0.0
    - bleach==3.1.0
    - chardet==3.0.4
    - cloudpickle==0.8.1
    - configparser==3.7.4
    - cvxopt==1.2.3
    - decorator==4.4.0
    - defusedxml==0.5.0
    - docutils==0.14
    - doit==0.29.0
    - entrypoints==0.3
    - ephem==3.7.6.0
    - funcsigs==1.0.2
    - h5py==2.9.0
    - idna==2.8
    - imagesize==1.1.0
    - importlib-resources==1.0.2
    - ipaddress==1.0.22
    - ipykernel==4.10.0
    - ipython==5.8.0
    - ipython-genutils==0.2.0
    - ipywidgets==7.4.2
    - jinja2==2.10
    - joblib==0.12.5
    - jsonschema==3.0.1
    - jupyter==1.0.0
    - jupyter-client==5.2.4
    - jupyter-console==5.2.0
    - jupyter-core==4.4.0
    - llvmlite==0.28.0
    - lxml==4.3.3
    - markupsafe==1.1.1
    - mistune==0.8.4
    - mock==2.0.0
    - nbconvert==5.4.1
    - nbformat==4.4.0
    - networkx==2.2
    - notebook==5.7.8
    - numba==0.43.1
    - packaging==19.0
    - pandocfilters==1.4.2
    - pathlib2==2.3.3
    - patsy==0.5.1
    - pbr==5.1.3
    - pexpect==4.6.0
    - pickleshare==0.7.5
    - pkginfo==1.5.0.1
    - plotly==3.7.1
    - prometheus-client==0.6.0
    - prompt-toolkit==1.0.15
    - ptyprocess==0.6.0
    - py4design==0.27
    - pycollada==0.6
    - pygments==2.3.1
    - pyinotify==0.9.6
    - pymc3==3.6
    - pymf==0.1.9
    - pyrsistent==0.14.11
    - pysal==1.14.4.post2
    - pyshp==2.1.0
    - pyyaml==5.1
    - pyzmq==18.0.1
    - qtconsole==4.4.3
    - readme-renderer==24.0
    - requests==2.21.0
    - requests-toolbelt==0.9.1
    - retrying==1.3.3
    - salib==1.2
    - scandir==1.10.0
    - scikit-learn==0.20.3
    - seaborn==0.9.0
    - send2trash==1.5.0
    - simplegeneric==0.8.1
    - snowballstemmer==1.2.1
    - sphinx==1.8.5
    - sphinxcontrib-websupport==1.1.0
    - terminado==0.8.2
    - testpath==0.4.2
    - theano==1.0.4
    - timezonefinder==4.0.1
    - tqdm==4.31.1
    - traitlets==4.3.2
    - twine==1.13.0
    - typing==3.6.6
    - urllib3==1.24.1
    - utm==0.4.2
    - wcwidth==0.1.7
    - webencodings==0.5.1
    - widgetsnbextension==3.4.2
    - xlrd==1.2.0
    - xlwt==1.3.0
    - deap==1.3.0
Toivo Säwén
la source
2
Ouais, c'est un gâchis. Par où commencer ... Il est fort probable qu'une grande partie de cela soit inutile (vous n'avez certainement pas besoin de ces canaux miroirs chinois si vous n'êtes pas en Chine). Je désespère que nous vous aidions à régler ce problème directement. Votre meilleure chance est de disposer d'une base de code que vous essayez d'exécuter. GREP que pour les instructions d'importation, ne conservez que ce qui est importé. Et si quelque chose a un paquet équivalent dans Conda, il devrait vraiment être déplacé de la pipsection, mais c'est juste une bonne pratique et pas tellement vers votre objectif de créer l'env.
merv
@merv J'étais inquiet que ce soit la réponse. Je suis juste curieux de savoir pourquoi il vérifie les chemins de conflit comme version='>=2.12.6,<3.0a0'lorsque celui-ci dependenciesest 2.13.1et je l'ai installé conda install fontconfig=2.13.1.
Toivo Säwén
Je ne suis pas totalement sûr. Si je devais deviner, il semble que lorsque Conda entre en mode de résolution de conflits, il traite la spécification explicite fontconfig=2.13.1comme une autre contrainte, avec celles qui proviennent de tous les packages qui l'ont comme dépendance (par exemple, fontconfig[version='>=2.12.6,<3.0a0']) puis essaie de trouver le carrefour. Peut-être qu'il ne se rend tout simplement pas compte que parce que toutes vos spécifications sont explicites jusqu'à la construction, il n'y a en fait pas de marge de manœuvre.
merv

Réponses:

7

Cette erreur et le comportement qui en découle proviennent très probablement du bogue Anaconda qui, de temps en temps, provoque des incohérences dans l'environnement local. Au 26 janvier 2020, le bogue n'était pas encore résolu.

Pour moi, le même problème se manifeste profondément sur Mac.

sophros
la source
3

En général, la réponse à cette question est que vous devez créer votre .yml à la main à partir de rien, avec uniquement les canaux et les contraintes requis. Vous devez assouplir les contraintes de version afin qu'elles ne ressemblent qu'à 1.19 au lieu de 1.19.10

Cependant, malgré ce conseil, j'ai presque exactement votre problème en ce moment. Il a passé de nombreuses heures sur fontconfig et je l'ai laissé pendant la nuit avant d'abandonner. Ma spécification est assez simple:

channels:
  - conda-forge
  - usgs-astrogeology
  - defaults
dependencies:
  - python=3.6
  - isis3
  - gdal=2.3

Je vais modifier cela quand je le découvrirai.

EDIT: Ce problème est en cours de discussion ici (spécifique au logiciel que j'essayais de configurer, probablement pas utile pour les autres) https://github.com/USGS-Astrogeology/ISIS3/issues/3570

barbecue
la source
1

Dans mon cas, j'avais remplacé certaines des versions de construction (la ...=he4413a7_1000partie) car celles du fichier d'origine avaient été réétiquetées comme brokensur conda-forge. Cependant, même si le numéro de version n'avait pas changé pour ces dépendances, leurs sous-dépendances avaient changé, provoquant tous ces conflits. La conclusion est la suivante: ne jouez pas avec les dépendances manuellement.

J'ai résolu le problème en conservant les spécifications de la version de construction d'origine et en l'ajoutant conda-forge/labels/brokenà la channelspartie du .ymlfichier.

Toivo Säwén
la source
0

J'ai également été confronté au même problème sur Windows 10, en utilisant pycharm avec la dernière version d'Anaconda (Python 3.7) en date du 17 février 2020. Curieusement, le fait de basculer le "utiliser le gestionnaire de paquets conda" sur la page d'interprétation du projet dans les paramètres de pycharm m'a permis de mettre à jour numpy et d'installer les paquets normalement. Essayez d'installer un package sans le gestionnaire de packages conda et avec le gestionnaire de packages conda. Bonne chance!

Frozenranger
la source
-1

J'ai rencontré ce problème et l'ai résolu. Tout d'abord, j'ai fait ma version anaconda pour être cohérente avec d'où le fichier yaml exporter. Cela peut être inutile mais je considère qu'une version conda cohérente peut promettre un environnement de base cohérent. Deuxièmement, j'ai supprimé toutes les dépendances, mais certains packages «principaux» que je souhaite réellement utiliser dans mon fichier yaml, ce qui signifie que ces packages «principaux» gèrent les problèmes de dépendance.

valax
la source
-1

Pour moi, l'ajout de ce qui suit au fichier yaml a fonctionné:

channels:
  - conda-forge
  - defaults
  - conda-forge/label/broken
Frank Tap
la source
J'ai déjà écrit ceci dans une autre réponse?
Toivo Säwén
Je suis désolé, vous avez raison
Frank Tap le
-2

Pour moi, le mieux a été de faire:

which python (confirmant qu'il était dans le bac anaconda3)

python --version
conda search "^python$"

Notez quelle version correspond à la version (ici 3.7.3) utilisée pour Anaconda (puisque je crée un nouvel environnement, il va de soi que je pourrais utiliser la même version de Python qu'Anaconda elle-même utilise). Notez que ma fiche provenant des chaînes de conda (recherche de conda ci-dessus) ne montrait qu'une seule ligne 3.7.3.

Ensuite, faites ceci:

conda create -n myenv python=3.7.3 anaconda

Il a fallu environ 1 minute pour exécuter la dernière commande :)

Cameron Tully-Smith
la source