Как сообщить conda об установке более поздней версии apache-beam?

Я новичок в Conda и пытаюсь познакомиться с ней, используя miniconda для установки пакета python apache-beam. Я вижу на https://anaconda.org/conda-forge/apache-beam что последняя доступная версия v2.22.0

введите описание изображения здесь

однако, когда я пытаюсь установить с помощью conda install -c conda-forge/label/cf201901 apache-beam, он пытается установить v2.16.0:

# conda install -c conda-forge/label/cf201901 apache-beam
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: \
The environment is inconsistent, please check the package plan carefully
The following packages are causing the inconsistency:

  - defaults/linux-64::mock==2.0.0=py37_0
  - defaults/linux-64::pyarrow==0.13.0=py37he6710b0_0
  - defaults/linux-64::mkl_random==1.1.1=py37h0573a6f_0
  - defaults/linux-64::arrow-cpp==0.13.0=py37h117bdfb_0
  - defaults/noarch::requests==2.25.1=pyhd3eb1b0_0
  - defaults/linux-64::cryptography==2.3.1=py37hc365091_0
  - defaults/noarch::packaging==20.8=pyhd3eb1b0_0
  - defaults/noarch::pytest-xdist==2.2.0=pyhd3eb1b0_0
  - conda-forge/linux-64::behave==1.2.6=py37h89c1867_1003
  - conda-forge/linux-64::parse_type==0.5.2=py37h89c1867_3
  - defaults/linux-64::pytest==6.2.1=py37h06a4308_0
  - defaults/noarch::python-dateutil==2.8.1=py_0
  - defaults/noarch::pytest-forked==1.3.0=py_0
  - defaults/linux-64::mkl-service==2.3.0=py37he8ac12f_0
  - defaults/linux-64::numpy-base==1.19.2=py37hfa32c7d_0
  - defaults/linux-64::pandas==1.1.5=py37ha9443f7_0
  - defaults/linux-64::requests-kerberos==0.12.0=py37_0
  - defaults/noarch::urllib3==1.26.2=pyhd3eb1b0_0
  - defaults/linux-64::numpy==1.19.2=py37h54aff64_0
  - defaults/linux-64::mkl_fft==1.2.0=py37h23d657b_0
  - defaults/noarch::python-hdfs==2.5.8=py_0
  - defaults/linux-64::pyopenssl==19.0.0=py37_0
done

## Package Plan ##

  environment location: /opt/conda/envs/python3

  added / updated specs:
    - apache-beam


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    apache-beam-2.16.0         |   py37h516909a_0         3.4 MB  conda-forge
    grpcio-1.16.0              |   py37hd60e7a3_0         1.0 MB  conda-forge/label/cf201901
    oauth2client-4.1.3         |             py_0          66 KB  conda-forge
    protobuf-3.6.0             |   py37hf484d3e_0         609 KB  main
    six-1.11.0                 |        py37_1001          21 KB  conda-forge/label/cf201901
    ------------------------------------------------------------
                                           Total:         5.1 MB

The following NEW packages will be INSTALLED:

  apache-beam        conda-forge/linux-64::apache-beam-2.16.0-py37h516909a_0
  grpcio             conda-forge/label/cf201901/linux-64::grpcio-1.16.0-py37hd60e7a3_0
  oauth2client       conda-forge/noarch::oauth2client-4.1.3-py_0
  protobuf           main/linux-64::protobuf-3.6.0-py37hf484d3e_0
  six                conda-forge/label/cf201901/linux-64::six-1.11.0-py37_1001

Почему это?


person jamiet    schedule 13.01.2021    source источник


Ответы (2)


Одна из возможных причин, по которой ваша команда не может предоставить вам последнюю версию, заключается в том, что она недоступна, если вы укажете метку cf201901 для conda forge, которую вы можете увидеть на website:

введите описание изображения здесь

Но также, когда вы пытаетесь явно указать версию:

$ conda install -c conda-forge/label/cf201901 apache-beam=2.22
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.

PackagesNotFoundError: The following packages are not available from current channels:

  - apache-beam=2.22

Current channels:

  - https://conda.anaconda.org/conda-forge/label/cf201901/linux-64
  - https://conda.anaconda.org/conda-forge/label/cf201901/noarch
  - https://repo.anaconda.com/pkgs/main/linux-64
  - https://repo.anaconda.com/pkgs/main/noarch
  - https://repo.anaconda.com/pkgs/r/linux-64
  - https://repo.anaconda.com/pkgs/r/noarch

To search for alternate channels that may provide the conda package you're
looking for, navigate to

    https://anaconda.org

and use the search bar at the top of the page.

Поэтому постарайтесь не указывать метку и указать желаемую версию:

 conda install -c conda-forge apache-beam=2.22

Однако я подозреваю, что вы уже добавили conda-forge к каналам по умолчанию, поскольку в вашем выводе уже показано, что apache-beam извлекается из канала conda-forge без метки.

Итак, если описанное выше по-прежнему не работает, у вас есть конфликтующий пакет (версии) в вашей текущей среде, который conda не может разрешить для apache-beam версии 2.22.

Это можно решить, если вы просто создадите новую среду для проекта, для которого вам понадобится apache-beam:

conda create -n <some name> -c conda-forge apache-beam

это создаст среду, которую вы можете активировать с помощью

conda activate <some name>
person FlyingTeller    schedule 14.01.2021
comment
Спасибо за ответ, очень полезно. Я провел некоторое последующее расследование и смог установить apache-beam = 2.22.0 в совершенно новом окружении conda, так что действительно кажется, что у меня есть несколько конфликтующих версий (другие установленные мной пакеты были sh, pytest, pytest-xdict, ведут себя , ipython). - person jamiet; 14.01.2021
comment
Я пометил ваш ответ как ответ, а также опубликовал свой ответ с дополнительной информацией stackoverflow.com/a/65716731/201657. - person jamiet; 14.01.2021

Ответ от @FlyingTeller точно описал проблему и ее решение, но не помешал поделиться дополнительной информацией.

Я забыл сказать, что я создаю свой conda env в образе докера, и этот образ докера перестраивается в конвейере CI. Чтобы обеспечить повторяющуюся сборку, в моем репо есть файл environment.yaml, и именно он я использую для создания conda env.

Мне приходилось вносить изменения в этот файл environment.yaml в разное время за последний месяц (я установил sh, apache-beam, pytest, pytest-xdict, ipython, behavior ... и я думаю, что это порядок, в котором я их установил), и моя стратегия для этого заключается в следующем:

  1. docker run myimage:most-recently-built-tag
  2. conda install необходимые пакеты
  3. экспортировать новую версию environment.yaml
  4. зафиксировать новую версию environment.yaml в репо

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

Я создал новую среду и выпустил conda install sh apache-beam pytest pytest-xdict ipython behave, который успешно разрешил все зависимости и установил apache-beam = 2.2.0.

Поэтому я думаю, что моя стратегия, когда я хочу внести изменения в environment.yaml, должна быть следующей:

  1. создать новый conda env
  2. conda install все необходимые пакеты одной командой
  3. экспортировать новый environment.yaml и передать его в репо, чтобы его можно было использовать для создания моего образа докера в конвейере CI.

Комментарии по поводу чего-либо выше приветствуются.


ОБНОВИТЬ. Вот мой Dockerfile, который создает среду conda, из которой я могу экспортировать environment.yaml

FROM debian:buster-slim

RUN apt-get update && apt-get install curl gnupg -y

RUN curl https://repo.anaconda.com/pkgs/misc/gpgkeys/anaconda.asc | gpg --dearmor > conda.gpg && \
        install -o root -g root -m 644 conda.gpg /usr/share/keyrings/conda-archive-keyring.gpg && \
        gpg --keyring /usr/share/keyrings/conda-archive-keyring.gpg --no-default-keyring \
        --fingerprint 34161F5BF5EB1D4BFBBB8F0A8AEB4F8B29D82806 && \
        echo "deb [arch=amd64 signed-by=/usr/share/keyrings/conda-archive-keyring.gpg] https://repo.anaconda.com/pkgs/misc/debrepo/conda stable main" \
        > /etc/apt/sources.list.d/conda.list

RUN MINICONDA_VERSION=4.9.2 && \
        CONDA_VERSION='4.9.*' && \
        CONDA_DIR=/opt/conda && \
        cd /tmp && \
        curl -O https://repo.anaconda.com/miniconda/Miniconda3-py37_${MINICONDA_VERSION}-Linux-x86_64.sh && \
        /bin/bash Miniconda3-py37_${MINICONDA_VERSION}-Linux-x86_64.sh -f -b -p $CONDA_DIR && \
        rm Miniconda3-py37_${MINICONDA_VERSION}-Linux-x86_64.sh && \
        $CONDA_DIR/bin/conda config --system --set auto_update_conda false && \
        $CONDA_DIR/bin/conda config --system --set show_channel_urls true && \
        $CONDA_DIR/bin/conda config --system --remove channels defaults && \
        $CONDA_DIR/bin/conda config --system --add channels main && \
        $CONDA_DIR/bin/conda config --system --set env_prompt '({name}) ' && \
        $CONDA_DIR/bin/conda config --system --append envs_dirs /opt/conda/envs/ && \
        $CONDA_DIR/bin/conda config --system --append pkgs_dirs /opt/conda/pkgs/ && \
        $CONDA_DIR/bin/conda update --quiet --yes --all conda="${CONDA_VERSION}" && \
        $CONDA_DIR/bin/conda config --system --append channels conda-forge  && \
        $CONDA_DIR/bin/conda create -n py3 python=3.7 

RUN bash -c "source /opt/conda/bin/activate /opt/conda/envs/py3 && conda install apache-beam sh pytest pytest-xdist ipython behave"

RUN echo "source /opt/conda/bin/activate /opt/conda/envs/py3" >> /root/.bashrc

и сгенерируйте мой environment.yaml, запустив:

docker build . -t conda-beam && \
  docker run --entrypoint bash conda-beam:latest -c \
  "source /opt/conda/bin/activate /opt/conda/envs/py3 \
  && conda env export"

который, когда я его только что запустил, вернул

name: py3
channels:
  - main
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - apache-beam=2.22.0=py37h8f50634_0
  - apipkg=1.5=py37_0
  - arrow-cpp=0.15.1=py37h7cd5009_5
  - attrs=20.3.0=pyhd3eb1b0_0
  - backcall=0.2.0=py_0
  - behave=1.2.6=py37h89c1867_1003
  - blas=1.0=mkl
  - boost-cpp=1.71.0=h7b6447c_0
  - brotli=1.0.9=he6710b0_2
  - brotlipy=0.7.0=py37h27cfd23_1003
  - bzip2=1.0.8=h7b6447c_0
  - c-ares=1.17.1=h27cfd23_0
  - ca-certificates=2020.12.8=h06a4308_0
  - certifi=2020.12.5=py37h06a4308_0
  - cffi=1.14.4=py37h261ae71_0
  - chardet=4.0.0=py37h06a4308_1003
  - crcmod=1.7=py37hc8dfbb8_1003
  - cryptography=3.3.1=py37h3c74f83_0
  - cython=0.29.21=py37h2531618_0
  - decorator=4.4.2=py_0
  - dill=0.3.1.1=py37_1
  - docopt=0.6.2=py37_0
  - double-conversion=3.1.5=he6710b0_1
  - execnet=1.7.1=py_0
  - fastavro=0.23.5=py37h7b6447c_0
  - future=0.18.2=py37_1
  - gflags=2.2.2=he6710b0_0
  - glog=0.4.0=he6710b0_0
  - grpc-cpp=1.26.0=hf8bcb03_0
  - grpcio=1.31.0=py37hf8bcb03_0
  - httplib2=0.17.0=py37hc8dfbb8_1
  - icu=58.2=he6710b0_3
  - idna=2.10=py_0
  - importlib-metadata=2.0.0=py_1
  - importlib_metadata=2.0.0=1
  - iniconfig=1.1.1=py_0
  - intel-openmp=2020.2=254
  - ipython=7.19.0=py37hb070fc8_0
  - ipython_genutils=0.2.0=pyhd3eb1b0_1
  - jedi=0.18.0=py37h06a4308_0
  - krb5=1.18.2=h173b8e3_0
  - ld_impl_linux-64=2.33.1=h53a641e_7
  - libboost=1.71.0=h97c9712_0
  - libedit=3.1.20191231=h14c3975_1
  - libevent=2.1.8=h1ba5d50_1
  - libffi=3.3=he6710b0_2
  - libgcc-ng=9.1.0=hdf63c60_0
  - libprotobuf=3.11.2=hd408876_0
  - libstdcxx-ng=9.1.0=hdf63c60_0
  - lz4-c=1.8.1.2=h14c3975_0
  - mkl=2020.2=256
  - mkl-service=2.3.0=py37he8ac12f_0
  - mkl_fft=1.2.0=py37h23d657b_0
  - mkl_random=1.1.1=py37h0573a6f_0
  - mock=2.0.0=py37_0
  - more-itertools=8.6.0=pyhd3eb1b0_0
  - ncurses=6.2=he6710b0_1
  - numpy=1.19.2=py37h54aff64_0
  - numpy-base=1.19.2=py37hfa32c7d_0
  - oauth2client=4.1.3=py_0
  - openssl=1.1.1i=h27cfd23_0
  - packaging=20.8=pyhd3eb1b0_0
  - pandas=1.2.0=py37ha9443f7_0
  - parse=1.18.0=pyh9f0ad1d_0
  - parse_type=0.5.2=py37h89c1867_3
  - parso=0.7.0=py_0
  - pbr=5.5.1=py_0
  - pexpect=4.8.0=pyhd3eb1b0_3
  - pickleshare=0.7.5=pyhd3eb1b0_1003
  - pip=20.3.3=py37h06a4308_0
  - pluggy=0.13.1=py37_0
  - prompt-toolkit=3.0.8=py_0
  - protobuf=3.11.2=py37he6710b0_0
  - ptyprocess=0.7.0=pyhd3eb1b0_2
  - py=1.10.0=pyhd3eb1b0_0
  - pyarrow=0.15.1=py37h0573a6f_0
  - pyasn1=0.4.8=py_0
  - pyasn1-modules=0.2.8=py_0
  - pycparser=2.20=py_2
  - pydot=1.3.0=py37_0
  - pygments=2.7.3=pyhd3eb1b0_0
  - pykerberos=1.2.1=py37h680d80a_2
  - pymongo=3.11.2=py37h2531618_0
  - pyopenssl=20.0.1=pyhd3eb1b0_1
  - pyparsing=2.4.7=py_0
  - pysocks=1.7.1=py37_1
  - pytest=6.2.1=py37h06a4308_0
  - pytest-forked=1.3.0=py_0
  - pytest-xdist=2.2.0=pyhd3eb1b0_0
  - python=3.7.9=h7579374_0
  - python-avro=1.9.2.1=py37hc8dfbb8_1
  - python-dateutil=2.8.1=py_0
  - python-hdfs=2.5.8=py_0
  - python_abi=3.7=1_cp37m
  - pytz=2020.5=pyhd3eb1b0_0
  - pyyaml=5.3.1=py37h7b6447c_1
  - re2=2020.11.01=h2531618_1
  - readline=8.0=h7b6447c_0
  - requests=2.25.1=pyhd3eb1b0_0
  - requests-kerberos=0.12.0=py37_0
  - rsa=4.7=pyhd3eb1b0_0
  - setuptools=51.1.2=py37h06a4308_3
  - sh=1.14.1=py37h06a4308_0
  - six=1.11.0=py37_1
  - snappy=1.1.8=he6710b0_0
  - sqlite=3.33.0=h62c20be_0
  - thrift-cpp=0.11.0=h02b749d_3
  - tk=8.6.10=hbc83047_0
  - toml=0.10.1=py_0
  - traitlets=5.0.5=py_0
  - typing-extensions=3.7.4.3=0
  - typing_extensions=3.7.4.3=py_0
  - uriparser=0.9.3=he6710b0_1
  - urllib3=1.26.2=pyhd3eb1b0_0
  - wcwidth=0.2.5=py_0
  - wheel=0.36.2=pyhd3eb1b0_0
  - xz=5.2.5=h7b6447c_0
  - yaml=0.2.5=h7b6447c_0
  - zipp=3.4.0=pyhd3eb1b0_0
  - zlib=1.2.11=h7b6447c_3
  - zstd=1.3.7=h0b5b093_0
prefix: /opt/conda/envs/py3
person jamiet    schedule 14.01.2021