Conda-Umgebung erstellen: „Gefundene Konflikte!“ beim Lösen von Umgebungen und beim Finden des kürzesten Konfliktpfads, der für immer ausgeführt wird

12

Ich erhielt eine environment.ubuntu.ymlDatei, um eine Conda-Umgebung erstellen zu können. Beim Ausführen conda create env --file environment.ubuntu.ymlerhalte ich jedoch die folgende Ausgabe:

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

Das Finding shortest conflict pathdauert lange - anscheinend wird versucht, einige Abhängigkeitsprobleme zu lösen. Wenn wir 2 Stunden laufen, ist nicht klar, ob es jemals aufhören wird.

Meine Frage ist: Was passiert hier und kann ich diesen Prozess irgendwie manuell beschleunigen, z. B. indem ich unnötige Abhängigkeiten entferne? Da ich die Umgebung nicht erstellt habe, weiß ich nicht, welche tatsächlich notwendig sind.

Der Grund, warum ich neugierig bin, ist, dass es Konfliktpfade überprüft, wie fontconfig[version='>=2.12.6,<3.0a0']wenn der in dependenciesist 2.13.1und ich ihn durch installiert habe2.13.1

Nachfolgend finden Sie die .yml-Datei als Referenz.

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
quelle
2
Ja, das ist ein Chaos. Wo soll ich anfangen ... Es ist sehr wahrscheinlich, dass vieles davon unnötig ist (Sie brauchen diese chinesischen Spiegelkanäle definitiv nicht, wenn Sie nicht in China sind). Ich verzweifle daran, dass wir Ihnen dabei helfen, dies direkt zu klären. Ihre beste Chance besteht darin, dass Sie tatsächlich eine Codebasis haben, die Sie ausführen möchten. GREP das für Importanweisungen, dann behalten Sie nur das, was importiert wird. Und wenn etwas in Conda ein gleichwertiges Paket hat, sollte es wirklich aus dem pipAbschnitt entfernt werden, aber das ist nur eine gute Übung und nicht so sehr in Richtung Ihres Ziels, die Umgebung zu erstellen.
Merv
@merv Ich war besorgt, dass dies die Antwort war. Ich bin nur neugierig, warum es Konfliktpfade überprüft, wie version='>=2.12.6,<3.0a0'wenn der in dependenciesist 2.13.1und ich es durch installiert habe conda install fontconfig=2.13.1.
Toivo Säwén
Ich bin mir nicht ganz sicher. Wenn ich raten müsste, scheint es, dass wenn Conda in den Konfliktlösungsmodus wechselt, die explizite Spezifikation fontconfig=2.13.1als nur eine weitere Einschränkung behandelt wird, zusammen mit denen, die aus allen Paketen stammen, die sie als Abhängigkeit haben (z. B. fontconfig[version='>=2.12.6,<3.0a0']) und dann versuchen, sie zu finden Der Schnittpunkt. Vielleicht merkt es einfach nicht, dass es tatsächlich keinen Spielraum gibt, weil alle Ihre Spezifikationen bis auf den Build explizit sind.
Merv

Antworten:

7

Dieser Fehler und das nachfolgende Verhalten sind sehr wahrscheinlich auf den Anaconda-Fehler zurückzuführen, der von Zeit zu Zeit zu Inkonsistenzen in der lokalen Umgebung führt. Bis zum 26. Januar 2020 war der Fehler noch nicht behoben.

Für mich manifestiert sich das gleiche Problem zutiefst auf dem Mac.

Sophros
quelle
3

Im Allgemeinen lautet die Antwort auf diese Frage, dass Sie Ihre .yml von Hand von Grund auf neu erstellen sollten, nur mit den erforderlichen Kanälen und Einschränkungen. Sie sollten die Versionsbeschränkungen lockern, damit sie nur wie 1.19 statt 1.19.10 aussehen

Trotz Befolgung dieses Ratschlags habe ich jetzt fast genau Ihr Problem. Es hat viele Stunden mit fontconfig verbracht und ich habe es über Nacht verlassen, bevor ich aufgegeben habe. Meine Spezifikation ist ziemlich einfach:

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

Ich werde das bearbeiten, wenn ich es herausfinde.

BEARBEITEN: Dieses Problem wird hier diskutiert (speziell für die Software, die ich einrichten wollte, wahrscheinlich nicht hilfreich für andere). Https://github.com/USGS-Astrogeology/ISIS3/issues/3570

Foobarbecue
quelle
1

In meinem Fall hatte ich einige der Build-Versionen (das ...=he4413a7_1000Teil) ersetzt, da die in der Originaldatei wie brokenam neu etikettiert worden waren conda-forge. Obwohl sich die Versionsnummer für diese Abhängigkeiten nicht geändert hatte, hatten sich ihre Unterabhängigkeiten geändert, was all diese Konflikte verursachte. Das Fazit lautet: Spielen Sie nicht manuell mit Abhängigkeiten.

Ich habe das Problem gelöst, indem ich die ursprünglichen Build-Versionsspezifikationen beibehalten und conda-forge/labels/brokenden channelsTeil der .ymlDatei hinzugefügt habe .

Toivo Säwén
quelle
0

Ich war auch mit dem gleichen Problem unter Windows 10 konfrontiert, als ich Pycharm mit Anaconda (Python 3.7) verwendete, das am 17. Februar 2020 erstellt wurde. Seltsamerweise konnte ich durch Umschalten des "use conda package manager" auf der Projektinterpreter-Seite in den Pycharm-Einstellungen numpy aktualisieren und Pakete normal installieren. Versuchen Sie, ein Paket ohne den conda package manager und mit dem conda package manager zu installieren. Viel Glück!

Frozenranger
quelle
-1

Ich habe dieses Problem getroffen und gelöst. Erstens habe ich meine Anaconda-Version so gestaltet, dass sie mit dem Export der Yaml-Datei übereinstimmt. Dies mag nutzlos sein, aber ich denke, dass eine konsistente Conda-Version eine konsistente Basisumgebung versprechen kann. Zweitens habe ich alle Abhängigkeiten gelöscht, aber einige 'Haupt'-Pakete, die ich tatsächlich in meiner yaml-Datei verwenden möchte. Das bedeutet, dass diese' Haupt'-Pakete Abhängigkeitsprobleme behandeln lassen.

Valax
quelle
-1

Für mich hat das Hinzufügen der folgenden zur Yaml-Datei funktioniert:

channels:
  - conda-forge
  - defaults
  - conda-forge/label/broken
Frank Tap
quelle
Ich habe das schon in einer anderen Antwort geschrieben?
Toivo Säwén
Es tut mir leid, Sie haben Recht
Frank Tap
-2

Für mich hat es am besten funktioniert:

which python (Bestätigung, dass es sich im anaconda3-Behälter befand)

python --version
conda search "^python$"

Beachten Sie, welche Version mit der für Anaconda verwendeten Version (hier 3.7.3) übereinstimmt (da ich eine neue Umgebung erstelle, liegt es nahe, dass ich dieselbe Version von Python verwenden könnte, die Anaconda selbst verwendet). Beachten Sie, dass mein Eintrag aus den Conda-Kanälen (Conda-Suche oben) nur eine 3.7.3-Zeile zeigte.

Dann mach das:

conda create -n myenv python=3.7.3 anaconda

Es dauerte ungefähr 1 Minute, um den letzten Befehl auszuführen :)

Cameron Tully-Smith
quelle