Utwórz środowisko conda: „Znaleziono konflikty!” przy rozwiązywaniu środowiska i „Znalezieniu najkrótszej ścieżki konfliktu” działa wiecznie

12

Dostałem environment.ubuntu.ymlplik, aby móc stworzyć środowisko conda. Jednak po uruchomieniu conda create env --file environment.ubuntu.ymlotrzymuję następujące dane wyjściowe:

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

Trwa Finding shortest conflict pathto przez długi czas - najwyraźniej stara się rozwiązać niektóre problemy zależności. Działając przez 2 godziny nie jest jasne, czy kiedykolwiek przestanie.

Moje pytanie brzmi: co się tutaj dzieje i czy mogę w jakiś sposób ręcznie przyspieszyć ten proces, np. Usuwając niepotrzebne zależności? Ponieważ nie stworzyłem środowiska, nie wiem, które z nich są naprawdę potrzebne.

Jestem ciekawy, ponieważ sprawdza ścieżki konfliktu, na przykład fontconfig[version='>=2.12.6,<3.0a0']gdy dependenciesjest w nim 2.13.1i zainstalowałem go2.13.1

Poniżej znajduje się plik .yml w celach informacyjnych.

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
źródło
2
Tak, to jest bałagan. Od czego zacząć ... Jest bardzo prawdopodobne, że duża część tego jest niepotrzebna (zdecydowanie nie potrzebujesz tych chińskich kanałów lustrzanych, jeśli nie jesteś w Chinach). Rozpaczam, że pomogliśmy ci rozwiązać to bezpośrednio. Twoja najlepsza szansa jest taka, jeśli faktycznie masz bazę kodu, którą próbujesz uruchomić. ZOBACZ to dla instrukcji importu, a następnie zachowaj tylko to, co zostanie zaimportowane. A jeśli coś ma równoważny pakiet w Condie, to naprawdę powinno zostać przeniesione z pipsekcji, ale to tylko dobra praktyka i nie tyle dążenie do celu, jakim jest stworzenie env.
merv
@merv Martwiłem się, że to jest odpowiedź. Jestem tylko ciekawy, dlaczego sprawdza ścieżki konfliktu, na przykład version='>=2.12.6,<3.0a0'gdy dependenciesjest w nim 2.13.1i zainstalowałem go conda install fontconfig=2.13.1.
Toivo Säwén
Nie jestem do końca pewien. Gdybym musiał zgadywać, wydaje się, że kiedy Conda wchodzi w tryb rozwiązywania konfliktów, traktuje jawną specyfikację fontconfig=2.13.1jako kolejne ograniczenie, wraz z tymi, które pochodzą ze wszystkich pakietów, które mają to jako zależność (np. fontconfig[version='>=2.12.6,<3.0a0']), A następnie próbuje znaleźć skrzyżowanie. Być może po prostu nie zdaje sobie sprawy, że ponieważ wszystkie twoje specyfikacje są wyraźne aż do kompilacji, w rzeczywistości nie ma miejsca na poruszanie się.
merv

Odpowiedzi:

7

Ten błąd i późniejsze zachowanie najprawdopodobniej pochodzi od błędu Anaconda, który od czasu do czasu powoduje niespójności w lokalnym środowisku. Na dzień 26 stycznia 2020 r. Błąd nie został jeszcze rozwiązany.

Dla mnie ten sam problem objawia się głęboko na Macu.

Sophros
źródło
3

Ogólnie rzecz biorąc, odpowiedź na to pytanie jest taka, że ​​powinieneś stworzyć swój .yml od zera, z tylko wymaganymi kanałami i ograniczeniami. Powinieneś złagodzić ograniczenia wersji, aby wyglądały jak 1,19 zamiast 1.19.10

Jednak pomimo zastosowania się do tych rad mam prawie dokładnie twój problem. Spędziłem wiele godzin na fontconfig i zostawiłem go na noc, zanim się poddałem. Moja specyfikacja jest dość prosta:

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

Zedytuję to, kiedy to rozgryzę.

EDYCJA: Ten problem jest tutaj omawiany (specyficzny dla oprogramowania, które próbowałem skonfigurować, prawdopodobnie nie jest pomocny dla innych) https://github.com/USGS-Astrogeology/ISIS3/issues/3570

foobarbecue
źródło
1

W moim przypadku zastąpiłem niektóre wersje kompilacji ( ...=he4413a7_1000część), ponieważ te w oryginalnym pliku zostały ponownie oznakowane jako brokenwłączone conda-forge. Jednak pomimo tego, że numer wersji nie zmienił się dla tych zależności, zmieniły się ich zależności, powodując wszystkie te konflikty. Najważniejsze jest to: nie rób bałaganu z zależnościami ręcznie.

Rozwiązałem problem, zachowując specyfikację oryginalnej wersji kompilacji i dodając conda-forge/labels/brokendo channelsczęści .ymlpliku.

Toivo Säwén
źródło
0

Z tym samym problemem miałem także do czynienia z Windows 10, używając pycharma z najnowszą wersją anakondy (python 3.7) z 17 lutego2020. O dziwo, przełączanie „Użyj menedżera pakietów conda” na stronie interpretera projektu w ustawieniach pycharma pozwoliło mi zaktualizować numpy i normalnie zainstalować pakiety. Spróbuj zainstalować pakiet bez menedżera pakietów conda i za pomocą menedżera pakietów conda. Powodzenia!

Frozenranger
źródło
-1

Znalazłem ten problem i rozwiązałem go. Po pierwsze, sprawiłem, że moja wersja anakondy była spójna z tym, skąd eksportowany jest plik yaml. Może to być bezużyteczne, ale uważam, że spójna wersja conda może obiecać spójne środowisko podstawowe. Po drugie, usunąłem wszystkie zależności, ale niektóre „główne” pakiety, których faktycznie chcę użyć w moim pliku yaml. Oznacza to, że te „główny” pakiet może obsługiwać problemy z zależnościami.

valax
źródło
-1

Dla mnie zadziałało dodanie następującego pliku yaml:

channels:
  - conda-forge
  - defaults
  - conda-forge/label/broken
Frank Tap
źródło
Napisałem to już w innej odpowiedzi?
Toivo Säwén
Przepraszam, masz rację
Frank Tap
-2

Dla mnie najlepiej działało:

which python (potwierdzając, że był w pojemniku anaconda3)

python --version
conda search "^python$"

Zauważ, która wersja jest zgodna z wersją (tutaj 3.7.3) używaną dla Anacondy (ponieważ tworzę nowe środowisko, oczywiste jest, że mógłbym użyć tej samej wersji Pythona, z której korzysta sama Anaconda). Zauważ, że mój wpis z kanałów conda (powyższe wyszukiwanie conda) pokazał tylko jedną linię 3.7.3.

Następnie zrób to:

conda create -n myenv python=3.7.3 anaconda

Wykonanie ostatniego polecenia zajęło około 1 minuty :)

Cameron Tully-Smith
źródło