Crear entorno de conda: "¡Conflictos encontrados!" al resolver el entorno y "Encontrar el camino de conflicto más corto" para siempre

12

Se me proporcionó un environment.ubuntu.ymlarchivo para poder crear un entorno conda. Sin embargo, al ejecutar conda create env --file environment.ubuntu.ymlme sale el siguiente resultado:

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%|
...

El Finding shortest conflict pathcontinúa durante mucho tiempo - al parecer se está tratando de resolver algunos problemas de dependencia. Funcionando durante 2 horas no está claro si alguna vez se detendrá.

Mi pregunta es: ¿qué está sucediendo aquí y puedo acelerar de alguna manera manualmente este proceso, por ejemplo, eliminando dependencias innecesarias? Como no creé el entorno, no sé cuáles son realmente necesarios.

La razón por la que tengo curiosidad es porque está buscando caminos de conflicto como fontconfig[version='>=2.12.6,<3.0a0']cuando el que está en dependencieses 2.13.1y lo he instalado a través2.13.1

A continuación encontrará el archivo .yml como referencia.

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
fuente
2
Sí, eso es un desastre. Por dónde empezar ... Es muy probable que gran parte de esto sea innecesario (definitivamente no necesitas esos canales espejo chinos si no estás en China). Me desespero de que te ayudemos a resolver esto directamente. Su mejor oportunidad es si realmente tiene algún código base que está intentando ejecutar. GREP que para las declaraciones de importación, conserve solo lo que se importa. Y si algo tiene un paquete equivalente en Conda, realmente se debe mover de la pipsección, pero eso es solo una buena práctica y no tanto avanzar hacia su objetivo de crear el entorno.
merv
@merv Me preocupaba que esta fuera la respuesta. Tengo curiosidad por lo que es el control de los caminos de conflicto como version='>=2.12.6,<3.0a0'cuando el que está en dependencieses 2.13.1y yo he instalado a través conda install fontconfig=2.13.1.
Toivo Säwén
No estoy totalmente seguro. Si tuviera que adivinar, parece que cuando Conda ingresa al modo de resolución de conflictos, trata la especificación explícita fontconfig=2.13.1como una restricción más, junto con las que provienen de todos los paquetes que la tienen como una dependencia (por ejemplo, fontconfig[version='>=2.12.6,<3.0a0']) y luego trata de encontrar la intersección. Tal vez simplemente no se da cuenta de que debido a que todas sus especificaciones son explícitas hasta la construcción, en realidad no hay margen de maniobra.
merv

Respuestas:

7

Es muy probable que este error y el comportamiento posterior provengan del error de Anaconda que ocasionalmente causa inconsistencias en el entorno local. A partir del 26 de enero de 2020, el error aún no se había resuelto.

Para mí, el mismo problema se manifiesta profundamente en Mac.

sophros
fuente
3

En general, la respuesta a esta pregunta es que debe crear su .yml a mano desde cero, solo con los canales y restricciones necesarios. Debería relajar las restricciones de versión para que solo se vean como 1.19 en lugar de 1.19.10

Sin embargo, a pesar de seguir este consejo, tengo casi exactamente su problema en este momento. Pasó muchas horas en fontconfig y lo dejé toda la noche antes de rendirme. Mi especificación es bastante simple:

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

Lo editaré cuando lo resuelva.

EDITAR: Este problema se está discutiendo aquí (específico para el software que estaba tratando de configurar, probablemente no sea útil para otros) https://github.com/USGS-Astrogeology/ISIS3/issues/3570

foobarbecue
fuente
1

En mi caso, había reemplazado algunas de las versiones de compilación (la ...=he4413a7_1000parte) ya que las del archivo original se habían vuelto a etiquetar como brokenen conda-forge. Sin embargo, a pesar de que el número de versión no había cambiado para estas dependencias, sus subdependencias habían cambiado, causando todos estos conflictos. La conclusión es: no te metas con las dependencias manualmente.

Resolví el problema manteniendo las especificaciones de la versión de compilación original y agregando conda-forge/labels/brokena la channelsparte del .ymlarchivo.

Toivo Säwén
fuente
0

También me enfrenté al mismo problema en Windows 10, usando pycharm con la última compilación de anaconda (python 3.7) a partir del 17 de febrero de 2020. Curiosamente, alternar el "administrador de paquetes use conda" en la página del intérprete del proyecto en la configuración de pycharm me permitió actualizar numpy e instalar paquetes normalmente. Intente instalar un paquete sin el administrador de paquetes conda y con el administrador de paquetes conda. ¡Buena suerte!

Frozenranger
fuente
-1

He encontrado este problema y lo solucioné. En primer lugar, hice que mi versión de anaconda sea coherente con el lugar desde el que se exporta el archivo yaml. Esto puede ser inútil, pero considero que una versión conda consistente puede prometer un entorno base consistente. En segundo lugar, eliminé todas las dependencias, pero algunos paquetes 'principales' que realmente quiero usar en mi archivo yaml. Eso significa que estos paquetes 'principales' manejan los problemas de dependencia.

valax
fuente
-1

Para mí, agregar lo siguiente al archivo yaml funcionó:

channels:
  - conda-forge
  - defaults
  - conda-forge/label/broken
Frank Tap
fuente
Ya he escrito esto en otra respuesta?
Toivo Säwén
Lo siento, tienes razón
Frank Tap
-2

Para mí funcionó mejor hacer:

which python (confirmando que estaba en el contenedor anaconda3)

python --version
conda search "^python$"

Tenga en cuenta qué versión coincide con la versión (aquí 3.7.3) en uso para Anaconda (dado que estoy creando un nuevo entorno, es lógico que pueda usar la misma versión de Python que Anaconda está usando). Tenga en cuenta que mi listado de los canales de conda (búsqueda de conda arriba) mostró solo una línea 3.7.3.

Entonces haz esto:

conda create -n myenv python=3.7.3 anaconda

Tomó alrededor de 1 minuto para ejecutar el último comando :)

Cameron Tully-Smith
fuente