Conda не может создать среду из yml

Я пытаюсь запустить приведенный ниже код, чтобы создать виртуальную среду Python из файла YAML. Я запускаю код в командной строке на сервере Ubuntu. Виртуальная среда называется py36. Когда я запускаю приведенный ниже код, я получаю сообщение ниже. Окружающая среда также не создается. Эта проблема вызвана тем, что у меня есть несколько пакетов, которые мне пришлось установить с помощью pip вместо Anaconda? Кто-нибудь знает, как решить эту проблему?

Я создал файл YAML по примеру:

https://datascience.stackexchange.com/questions/24093/how-to-clone-python-working-environment-on-another-machine

Код:

conda env create -f py36.yml

py36.yml

name: py36
channels:
  - anaconda
  - cvxgrp
  - conda-forge
  - defaults
dependencies:
  - beautifulsoup4=4.6.3=py36_0
  - patsy=0.5.1=py36_0
  - sqlite=3.25.3=ha441bb4_0
  - tk=8.6.8=ha441bb4_0
  - asn1crypto=0.24.0=py36_1003
  - ca-certificates=2018.11.29=ha4d7672_0
  - certifi=2018.11.29=py36_1000
  - cffi=1.11.5=py36h5e8e0c9_1
  - clangdev=4.0.0=default_0
  - cryptography=2.3.1=py36hdbc3d79_1000
  - cryptography-vectors=2.3.1=py36_1000
  - cycler=0.10.0=py_1
  - fftw=3.3.8=h470a237_0
  - freetype=2.9.1=h6debe1e_4
  - glpk=4.65=h16a7912_1
  - gmp=6.1.2=hfc679d8_0
  - icu=58.2=h0a44026_1000
  - idna=2.8=py36_1000
  - kiwisolver=1.0.1=py36h2d50403_2
  - lapack=3.6.1=1
  - libiconv=1.15=h1de35cc_1004
  - libpng=1.6.35=ha92aebf_2
  - libxml2=2.9.8=hf14e9c8_1005
  - lightgbm=2.2.1=py36hfc679d8_0
  - llvmdev=4.0.0=default_0
  - matplotlib=2.2.3=py36h0e0179f_0
  - metis=5.1.0=3
  - mkl_fft=1.0.6=py36_0
  - mkl_random=1.0.1=py36_0
  - mlxtend=0.13.0=py_1
  - openblas=0.2.20=8
  - openmp=4.0.0=1
  - openssl=1.0.2p=h1de35cc_1002
  - pandas=0.23.4=py36hf8a1672_0
  - pycparser=2.19=py_0
  - pyopenssl=18.0.0=py36_1000
  - pyparsing=2.2.0=py_1
  - pysocks=1.6.8=py36_1002
  - python=3.6.6=h4a56312_1003
  - pytz=2018.5=py_0
  - selenium=3.141.0=py36h470a237_0
  - tbb=2018_20171205=0
  - urllib3=1.24.1=py36_1000
  - cvxcanon=0.1.1=py36_0
  - cvxpy=1.0.6=py36_0
  - ecos=2.0.5=py36hf9b3073_0
  - multiprocess=0.70.4=py36_0
  - scs=1.2.6=py36_0
  - appnope=0.1.0=py36hf537a9a_0
  - backcall=0.1.0=py36_0
  - blas=1.0=mkl
  - cvxopt=1.2.0=py36hb579ef3_0
  - decorator=4.3.0=py36_0
  - dill=0.2.8.2=py36_0
  - dsdp=5.8=hb579ef3_0
  - fastcache=1.0.2=py36h1de35cc_2
  - gsl=2.4=h1de35cc_4
  - intel-openmp=2019.0=117
  - ipykernel=4.8.2=py36_0
  - ipython=6.4.0=py36_0
  - ipython_genutils=0.2.0=py36h241746c_0
  - jedi=0.12.0=py36_1
  - jupyter_client=5.2.3=py36_0
  - jupyter_core=4.4.0=py36h79cf704_0
  - libcxx=4.0.1=h579ed51_0
  - libcxxabi=4.0.1=hebd6815_0
  - libedit=3.1.20170329=hb402a30_2
  - libffi=3.2.1=h475c297_4
  - libgcc=4.8.5=hdbeacc1_10
  - libgfortran=3.0.1=h93005f0_2
  - libopenblas=0.3.3=hdc02c5d_2
  - libsodium=1.0.16=h3efe00b_0
  - mkl=2018.0.3=1
  - ncurses=6.1=h0a44026_0
  - numpy=1.15.4=py36h6a91979_0
  - numpy-base=1.15.4=py36h8a80b8c_0
  - parso=0.2.1=py36_0
  - pexpect=4.6.0=py36_0
  - pickleshare=0.7.4=py36hf512f8e_0
  - pip=10.0.1=py36_0
  - prompt_toolkit=1.0.15=py36haeda067_0
  - ptyprocess=0.5.2=py36he6521c3_0
  - pygments=2.2.0=py36h240cd3f_0
  - python-dateutil=2.7.3=py36_0
  - pyzmq=17.0.0=py36h1de35cc_1
  - readline=7.0=hc1231fa_4
  - scikit-learn=0.20.1=py36h4f467ca_0
  - scipy=1.1.0=py36h28f7352_1
  - setuptools=39.2.0=py36_0
  - simplegeneric=0.8.1=py36_2
  - six=1.11.0=py36h0e22d5e_1
  - suitesparse=5.2.0=he235d88_0
  - toolz=0.9.0=py36_0
  - tornado=5.0.2=py36_0
  - traitlets=4.3.2=py36h65bd3ce_0
  - wcwidth=0.1.7=py36h8c6ec74_0
  - wheel=0.31.1=py36_0
  - xz=5.2.4=h1de35cc_4
  - zeromq=4.2.5=h378b8a2_0
  - zlib=1.2.11=hf3cbc9b_2
  - pip:
    - absl-py==0.2.2
    - astor==0.6.2
    - bleach==1.5.0
    - cython==0.28.3
    - gast==0.2.0
    - grpcio==1.12.1
    - h5py==2.8.0
    - html5lib==0.9999999
    - keras==2.2.0
    - keras-applications==1.0.2
    - keras-preprocessing==1.0.1
    - markdown==2.6.11
    - pillow==5.1.0
    - protobuf==3.5.2.post1
    - pyramid-arima==0.6.5
    - pyyaml==3.12
    - sklearn==0.0
    - statsmodels==0.9.0
    - tensorboard==1.8.0
    - tensorflow==1.8.0
    - termcolor==1.1.0
    - tqdm==4.23.4
    - werkzeug==0.14.1
    - xlrd==1.1.0
prefix: /Users/username/anaconda2/envs/py36

Командная строка

conda env create -f py36.yml
Collecting package metadata: done
Solving environment: failed

ResolvePackageNotFound: 
  - libgfortran==3.0.1=h93005f0_2
  - pyzmq==17.0.0=py36h1de35cc_1
  - python==3.6.6=h4a56312_1003
  - prompt_toolkit==1.0.15=py36haeda067_0
  - libiconv==1.15=h1de35cc_1004
  - sqlite==3.25.3=ha441bb4_0
  - six==1.11.0=py36h0e22d5e_1
  - cryptography==2.3.1=py36hdbc3d79_1000
  - openssl==1.0.2p=h1de35cc_1002
  - libxml2==2.9.8=hf14e9c8_1005
  - libcxxabi==4.0.1=hebd6815_0
  - matplotlib==2.2.3=py36h0e0179f_0
  - ptyprocess==0.5.2=py36he6521c3_0
  - readline==7.0=hc1231fa_4
  - libedit==3.1.20170329=hb402a30_2
  - libgcc==4.8.5=hdbeacc1_10
  - xz==5.2.4=h1de35cc_4
  - pickleshare==0.7.4=py36hf512f8e_0
  - appnope==0.1.0=py36hf537a9a_0
  - scipy==1.1.0=py36h28f7352_1
  - cvxopt==1.2.0=py36hb579ef3_0
  - jupyter_core==4.4.0=py36h79cf704_0
  - dsdp==5.8=hb579ef3_0
  - ncurses==6.1=h0a44026_0
  - tk==8.6.8=ha441bb4_0
  - ecos==2.0.5=py36hf9b3073_0
  - wcwidth==0.1.7=py36h8c6ec74_0
  - scikit-learn==0.20.1=py36h4f467ca_0
  - libopenblas==0.3.3=hdc02c5d_2
  - traitlets==4.3.2=py36h65bd3ce_0
  - libsodium==1.0.16=h3efe00b_0
  - ipython_genutils==0.2.0=py36h241746c_0
  - fastcache==1.0.2=py36h1de35cc_2
  - numpy==1.15.4=py36h6a91979_0
  - numpy-base==1.15.4=py36h8a80b8c_0
  - zlib==1.2.11=hf3cbc9b_2
  - libffi==3.2.1=h475c297_4
  - pygments==2.2.0=py36h240cd3f_0
  - icu==58.2=h0a44026_1000
  - gsl==2.4=h1de35cc_4
  - libcxx==4.0.1=h579ed51_0
  - suitesparse==5.2.0=he235d88_0
  - zeromq==4.2.5=h378b8a2_0

Я знаю, что это довольно старый, но есть ли причина, по которой вы должны использовать pip для некоторых из этих пакетов, таких как tensorflow и sklearn?

AMC 16.04.2020 02:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
18
1
27 816
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Нет, проблема не в PyPI. Вместо этого это не удается, потому что YAML включает ограничения сборки для конкретной платформы, но вы переносите между платформами. В частности, изучив номера сборки неудачных пакетов (например, six=py36h0e22d5e_1), я вижу, что они соответствуют пакетам с платформы osx-64, но вы пытаетесь установить на платформе linux-64, поэтому ограничения сборки неразрешимы.

Пропустить информацию о сборке

Самое простое решение — исключить информацию о сборке из экспорта определения среды.

conda env export -n py36 -f py36.yml --no-builds

Могут возникнуть проблемы, если некоторые пакеты недоступны на linux-64 через Conda. В этом случае вам может потребоваться найти другие каналы (или проверить PyPI), сменить версию или полностью удалить зависимость. Хотя большинство пакетов выглядят стандартно.

Не так важно, но вы можете смело удалять cvxgrp со своих каналов. Этот канал обслуживает только устаревшую версию cvxopt и только для osx-64.

Только явные спецификации

Другой, еще более расплывчатый вариант — выводить только то, что Conda называет явные спецификации. Они указывают только те требования, которые были явно запрошены пользователем. Это включает в себя пакеты, но также фиксирует любые ограничения версии и т. д., которые были предоставлены пользователем в какой-то момент.

conda env export -n py36 -f py36.yml --from-history

Преимущество здесь в том, что любые зависимости от платформы будут игнорироваться.

Привет, Мерв, у меня тоже была эта проблема, и я сделал то, что ты говоришь. Это создало мою среду в anaconda3/envs, однако исполняемых файлов там нет, и у меня есть только папка conda-meta без каких-либо исполняемых файлов, к которым я могу добавить свой интерпретатор. Любая помощь будет оценена по достоинству.

deblue 03.03.2020 10:40

@deblue, пожалуйста, задайте новый вопрос

merv 03.03.2020 13:02

этот ответ находка

Tejas Shetty 16.03.2021 16:00

первый вариант имеет такие записи, как «zlib = 1.2.11» и включает все пакеты pypi.

Tejas Shetty 25.03.2021 07:11

второй вариант имеет такие записи, как «zlib», но игнорирует все пакеты pypi

Tejas Shetty 25.03.2021 07:12

@TejasShetty да, поскольку Conda не может отслеживать, когда вы используете pip install, нельзя считать пакет PyPI явной спецификацией. Я бы просто объединил два: добавил раздел pip: из первого во второй.

merv 25.03.2021 16:48

Действительно, среды хранят особенности сборки платформы в разделе conda-installed (то есть, dependencies). Из образца ОП:

  - zlib=1.2.11=hf3cbc9b_2

, hf3cbc9b_2 — это тег версии для конкретной платформы. Вы должны удалить это.

Если вы очень часто переключаетесь между платформами (например, OSX <-> Linux), пожалуйста, прочитайте ответ от @мерв, это правильное решение в вашем будущем env export.

На данный момент, как и я, просто хочу, чтобы это было исправлено, вы можете сделать это вручную или запустить над ним sed:

sed 's/\(.*[[:alnum:]]\)=[[:alnum:]][[:alnum:].-_]*/\1/' environment.yml > env.yml

. Это будет обрабатывать тег для конкретной платформы, не касаясь раздела pip файла.

Затем вы можете повторить попытку с помощью env.yml:

conda env create -f env.yml

Notice that platform-specific packages may occur. If after removing the version tags, Conda still complains, you'll have to manually clean the packages accordingly. For example, I'm bringing an environment.yml from Linux to Mac, where the packages libgcc-ng=9.1.0, libstdcxx-ng=9.1.0, libgfortran-ng=7.3.0 are not defined; I removed them by hand.

Как только такая чистка была сделана, моя conda env create -f env.yml заработала как часы.

этот ответ находка

Tejas Shetty 16.03.2021 16:00

Другие вопросы по теме