Как использование conda для установки пакета меняет мою версию Python и удаляет conda?

Я использовал Анаконду с Python 2.7

$ python
Python 2.7.14 |Anaconda custom (64-bit)| (default, Dec  7 2017, 17:05:42) 
[GCC 7.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.

Когда я решил установить tenorflow (так как по какой-то причине у меня была версия не-gpu)

Команда, которую я использовал, была:

$ conda install -c anaconda tensorflow-gpu

Однако после того, как это было сделано (подробности о выводе этого cmd приведены ниже), у меня больше не было conda:

$ conda install -c conda-forge keras
Traceback (most recent call last):
  File "/home/me/anaconda2/bin/conda", line 12, in <module>
    from conda.cli import main
ModuleNotFoundError: No module named 'conda'

(Примечание: у меня также больше не было Keras), и теперь я запускал Python 3.7 (!?):

$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Что случилось? Как я могу остановить это снова? Это случилось однажды, и в итоге я удалил все мои файлы anaconda, а затем переустановил. Я не хочу делать это привычкой.

Результат моей conda install был:

$ conda install -c anaconda tensorflow-gpu
Collecting package metadata: done
Solving environment: done

## Package Plan ##

  environment location: /home/me/anaconda2

  added / updated specs:
    - tensorflow-gpu


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    _tflow_190_select-0.0.1    |              gpu           2 KB  anaconda
    absl-py-0.7.0              |           py36_0         156 KB  anaconda
    astor-0.7.1                |           py36_0          43 KB  anaconda
    c-ares-1.15.0              |       h7b6447c_1          98 KB  anaconda
    ca-certificates-2018.12.5  |                0         123 KB  anaconda
    certifi-2018.11.29         |           py36_0         146 KB  anaconda
    cudatoolkit-9.0            |       h13b8566_0       340.4 MB  anaconda
    cudnn-7.1.2                |        cuda9.0_0       367.8 MB  anaconda
    cupti-9.0.176              |                0         1.6 MB  anaconda
    curl-7.63.0                |    hbc83047_1000         145 KB  anaconda
    gast-0.2.2                 |           py36_0         138 KB  anaconda
    git-2.11.1                 |                0         9.5 MB  anaconda
    grpcio-1.16.1              |   py36hf8bcb03_1         1.1 MB  anaconda
    krb5-1.16.1                |       h173b8e3_7         1.4 MB  anaconda
    libcurl-7.63.0             |    h20c2e04_1000         550 KB  anaconda
    libedit-3.1.20181209       |       hc058e9b_0         188 KB  anaconda
    libssh2-1.8.0              |       h1ba5d50_4         233 KB  anaconda
    markdown-3.0.1             |           py36_0         107 KB  anaconda
    mkl_fft-1.0.10             |   py36ha843d7b_0         170 KB  anaconda
    mkl_random-1.0.2           |   py36hd81dba3_0         407 KB  anaconda
    ncurses-6.1                |       he6710b0_1         958 KB  anaconda
    numpy-1.15.4               |   py36h7e9f1db_0          47 KB  anaconda
    numpy-base-1.15.4          |   py36hde5b4d6_0         4.3 MB  anaconda
    openssl-1.1.1              |       h7b6447c_0         5.0 MB  anaconda
    pip-18.1                   |           py36_0         1.8 MB  anaconda
    protobuf-3.5.2             |   py36hf484d3e_1         610 KB  anaconda
    python-3.6.8               |       h0371630_0        34.4 MB  anaconda
    qt-4.8.7                   |                2        34.1 MB  anaconda
    setuptools-40.6.3          |           py36_0         625 KB  anaconda
    six-1.12.0                 |           py36_0          22 KB  anaconda
    sqlite-3.26.0              |       h7b6447c_0         1.9 MB  anaconda
    tensorboard-1.9.0          |   py36hf484d3e_0         3.3 MB  anaconda
    tensorflow-1.9.0           |gpu_py36h02c5d5e_1           3 KB  anaconda
    tensorflow-base-1.9.0      |gpu_py36h6ecc378_0       170.8 MB  anaconda
    tensorflow-gpu-1.9.0       |       hf154084_0           2 KB  anaconda
    termcolor-1.1.0            |           py36_1           7 KB  anaconda
    tk-8.6.8                   |       hbc83047_0         3.1 MB  anaconda
    werkzeug-0.14.1            |           py36_0         423 KB  anaconda
    wheel-0.32.3               |           py36_0          35 KB  anaconda
    ------------------------------------------------------------
                                           Total:       985.7 MB

The following NEW packages will be INSTALLED:

  _tflow_190_select  anaconda/linux-64::_tflow_190_select-0.0.1-gpu
  c-ares             anaconda/linux-64::c-ares-1.15.0-h7b6447c_1
  cudatoolkit        anaconda/linux-64::cudatoolkit-9.0-h13b8566_0
  cudnn              anaconda/linux-64::cudnn-7.1.2-cuda9.0_0
  cupti              anaconda/linux-64::cupti-9.0.176-0
  krb5               anaconda/linux-64::krb5-1.16.1-h173b8e3_7
  pip                anaconda/linux-64::pip-18.1-py36_0
  tensorflow-gpu     anaconda/linux-64::tensorflow-gpu-1.9.0-hf154084_0

The following packages will be UPDATED:

  absl-py            conda-forge/noarch::absl-py-0.1.10-py~ --> anaconda/linux-64::absl-py-0.7.0-py36_0
  ca-certificates    conda-forge::ca-certificates-2018.11.~ --> anaconda::ca-certificates-2018.12.5-0
  curl                    pkgs/main::curl-7.60.0-h84994c4_0 --> anaconda::curl-7.63.0-hbc83047_1000
  gast                                         0.2.0-py27_0 --> 0.2.2-py36_0
  grpcio             pkgs/main::grpcio-1.12.1-py27hdbcaa40~ --> anaconda::grpcio-1.16.1-py36hf8bcb03_1
  libcurl              pkgs/main::libcurl-7.60.0-h1ad7b7a_0 --> anaconda::libcurl-7.63.0-h20c2e04_1000
  libedit                 pkgs/main::libedit-3.1-heed3624_0 --> anaconda::libedit-3.1.20181209-hc058e9b_0
  markdown           conda-forge/noarch::markdown-2.6.11-p~ --> anaconda/linux-64::markdown-3.0.1-py36_0
  mkl_fft            pkgs/main::mkl_fft-1.0.6-py27hd81dba3~ --> anaconda::mkl_fft-1.0.10-py36ha843d7b_0
  ncurses                 pkgs/main::ncurses-6.0-h9df7e31_2 --> anaconda::ncurses-6.1-he6710b0_1
  openssl            conda-forge::openssl-1.0.2p-h14c3975_~ --> anaconda::openssl-1.1.1-h7b6447c_0
  protobuf           conda-forge::protobuf-3.5.2-py27hd28b~ --> anaconda::protobuf-3.5.2-py36hf484d3e_1
  python               pkgs/main::python-2.7.14-h1571d57_29 --> anaconda::python-3.6.8-h0371630_0
  setuptools            pkgs/main::setuptools-38.4.0-py27_0 --> anaconda::setuptools-40.6.3-py36_0
  six                  pkgs/main::six-1.11.0-py27h5f960f1_1 --> anaconda::six-1.12.0-py36_0
  sqlite                pkgs/main::sqlite-3.23.1-he433501_0 --> anaconda::sqlite-3.26.0-h7b6447c_0
  tensorflow           conda-forge::tensorflow-1.3.0-py27_0 --> anaconda::tensorflow-1.9.0-gpu_py36h02c5d5e_1
  tk                         pkgs/main::tk-8.6.7-hc745277_3 --> anaconda::tk-8.6.8-hbc83047_0
  wheel              pkgs/main::wheel-0.30.0-py27h2bc6bb2_1 --> anaconda::wheel-0.32.3-py36_0

The following packages will be SUPERSEDED by a higher-priority channel:

  certifi            conda-forge::certifi-2018.11.29-py27_~ --> anaconda::certifi-2018.11.29-py36_0
  git                 pkgs/main::git-2.17.0-pl526hb75a9fb_0 --> anaconda::git-2.11.1-0
  libssh2               pkgs/main::libssh2-1.8.0-h9cfc8f7_4 --> anaconda::libssh2-1.8.0-h1ba5d50_4
  mkl_random         pkgs/main::mkl_random-1.0.2-py27hd81d~ --> anaconda::mkl_random-1.0.2-py36hd81dba3_0
  numpy              pkgs/main::numpy-1.15.4-py27h7e9f1db_0 --> anaconda::numpy-1.15.4-py36h7e9f1db_0
  numpy-base         pkgs/main::numpy-base-1.15.4-py27hde5~ --> anaconda::numpy-base-1.15.4-py36hde5b4d6_0
  qt                         pkgs/main::qt-5.9.4-h4e5bff0_0 --> anaconda::qt-4.8.7-2
  tensorflow-base    pkgs/main::tensorflow-base-1.9.0-eige~ --> anaconda::tensorflow-base-1.9.0-gpu_py36h6ecc378_0
  werkzeug                pkgs/main::werkzeug-0.14.1-py27_0 --> anaconda::werkzeug-0.14.1-py36_0

The following packages will be DOWNGRADED:

  astor                                        0.7.1-py27_0 --> 0.7.1-py36_0
  tensorboard                         1.10.0-py27hf484d3e_0 --> 1.9.0-py36hf484d3e_0
  termcolor                                    1.1.0-py27_1 --> 1.1.0-py36_1


Proceed ([y]/n)? y


Downloading and Extracting Packages
tensorflow-gpu-1.9.0 | 2 KB      | ########################################################################################################################################## | 100% 
absl-py-0.7.0        | 156 KB    | ########################################################################################################################################## | 100% 
six-1.12.0           | 22 KB     | ########################################################################################################################################## | 100% 
git-2.11.1           | 9.5 MB    | ########################################################################################################################################## | 100% 
_tflow_190_select-0. | 2 KB      | ########################################################################################################################################## | 100% 
setuptools-40.6.3    | 625 KB    | ########################################################################################################################################## | 100% 
c-ares-1.15.0        | 98 KB     | ########################################################################################################################################## | 100% 
cupti-9.0.176        | 1.6 MB    | ########################################################################################################################################## | 100% 
libssh2-1.8.0        | 233 KB    | ########################################################################################################################################## | 100% 
gast-0.2.2           | 138 KB    | ########################################################################################################################################## | 100% 
ncurses-6.1          | 958 KB    | ########################################################################################################################################## | 100% 
protobuf-3.5.2       | 610 KB    | ########################################################################################################################################## | 100% 
tensorflow-base-1.9. | 170.8 MB  | ########################################################################################################################################## | 100% 
ca-certificates-2018 | 123 KB    | ########################################################################################################################################## | 100% 
python-3.6.8         | 34.4 MB   | ########################################################################################################################################## | 100% 
cudatoolkit-9.0      | 340.4 MB  | ########################################################################################################################################## | 100% 
qt-4.8.7             | 34.1 MB   | ########################################################################################################################################## | 100% 
sqlite-3.26.0        | 1.9 MB    | ########################################################################################################################################## | 100% 
astor-0.7.1          | 43 KB     | ########################################################################################################################################## | 100% 
tensorboard-1.9.0    | 3.3 MB    | ########################################################################################################################################## | 100% 
mkl_fft-1.0.10       | 170 KB    | ########################################################################################################################################## | 100% 
mkl_random-1.0.2     | 407 KB    | ########################################################################################################################################## | 100% 
certifi-2018.11.29   | 146 KB    | ########################################################################################################################################## | 100% 
wheel-0.32.3         | 35 KB     | ########################################################################################################################################## | 100% 
numpy-base-1.15.4    | 4.3 MB    | ########################################################################################################################################## | 100% 
numpy-1.15.4         | 47 KB     | ########################################################################################################################################## | 100% 
curl-7.63.0          | 145 KB    | ########################################################################################################################################## | 100% 
openssl-1.1.1        | 5.0 MB    | ########################################################################################################################################## | 100% 
tk-8.6.8             | 3.1 MB    | ########################################################################################################################################## | 100% 
libedit-3.1.20181209 | 188 KB    | ########################################################################################################################################## | 100% 
markdown-3.0.1       | 107 KB    | ########################################################################################################################################## | 100% 
werkzeug-0.14.1      | 423 KB    | ########################################################################################################################################## | 100% 
krb5-1.16.1          | 1.4 MB    | ########################################################################################################################################## | 100% 
termcolor-1.1.0      | 7 KB      | ########################################################################################################################################## | 100% 
pip-18.1             | 1.8 MB    | ########################################################################################################################################## | 100% 
libcurl-7.63.0       | 550 KB    | ########################################################################################################################################## | 100% 
tensorflow-1.9.0     | 3 KB      | ########################################################################################################################################## | 100% 
grpcio-1.16.1        | 1.1 MB    | ########################################################################################################################################## | 100% 
cudnn-7.1.2          | 367.8 MB  | ########################################################################################################################################## | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

(Хорошо - я вижу изменение в Python 3.7 сейчас, но это все еще неприятная вещь, о которой нужно быть осторожным. Есть ли способ заставить его оставить мою версию Python в покое?)

Ответ 1

Причина

Изменение версий Python без обновления пакета conda нарушает работу Conda.. Изменение версии Python (2.7.14 → 3.6.8) создало ситуацию, когда новый python имеет новый site-packages, который больше не содержит пакет conda, тогда как если вы обновляете только в пределах 2.7.x, это не будет проблемой.

Conda включает в себя как набор двоичных файлов (например, то, что вы вызываете при вводе conda в оболочке), так и пакет Python с тем же именем. Пакет Python необходим для работы всего Conda, и он загружается всякий раз, когда вы пытаетесь использовать conda.

Проблематично то, что многие пакеты в Anaconda, по-видимому, инициируют изменения версии Python, но не запускают обновление пакета conda. Это похоже на то, что средство разрешения зависимостей пропускает - то есть поведение по умолчанию должно защищать целостность базовой среды, в которой живет conda.

Пытаясь восстановить

Один из возможных путей восстановления - временно использовать автономную сборку conda-exec для восстановления вашей базы env. Вы можете выполнять все следующие действия из любого каталога, поэтому, возможно, используйте временную загрузку или куда угодно, куда бы вы ни поместили загрузки. Пожалуйста, сообщите в комментариях, если это работает или нуждается в корректировке!

  1. Загрузите соответствующую Conda для вашей платформы (здесь мы будем использовать conda-latest-linux-64.exe). Не берите в голову .exe это двоичный файл и должен запускаться при вызове в оболочке. Я все равно переименую его в conda-exec:

    wget -O conda-exec https://repo.anaconda.com/pkgs/misc/conda-execs/conda-latest-linux-64.exe
    chmod +x conda-exec
    
  2. Временно установите CONDA_ROOT_PREFIX в основу вашей установки. Обычно это папка anaconda3 или miniconda3; в этом случае мы будем использовать путь, заданный OP:

    export CONDA_ROOT_PREFIX=/home/me/anaconda2
    
  3. Проверьте, что это работает:

    ./conda-exec info
    

    Ключевым моментом, который нужно проверить, является то, что base environment: правильно определяет, где находится ваш базовый env, и показывает его как (writable). Вы также должны увидеть папку pkgs в своей базе env в package cache:.

Вариант 1. Возвращение к предыдущей редакции

  1. Определите ревизию непосредственно перед текущей (мы будем обозначать ее здесь <k-1>) и попытайтесь восстановить ее:

    ./conda-exec list -n base --revisions
    ./conda-exec install -n base --revision <k-1>
    

    Если это работает, вы должны быть сделаны. Запустите новую оболочку и попробуйте снова использовать conda. В противном случае, другой вариант...

Вариант 2. Установите conda для текущего Python

  1. (Re-) Установите пакет conda в базу env:

    ./conda-exec install -n base conda
    

    Убедитесь, что предлагаемая сборка Conda соответствует установленной версии Python. Флаг --force-reinstall может быть полезен, если он утверждает, что требование уже выполнено.

Попробуйте новую оболочку и посмотрите, работает ли conda. Вам не нужно держать conda-exec рядом.

Последнее обращение

Если ничего не помогает, вам, возможно, придется переустановить. Другие сообщили об установке в других каталогах и возможности использовать и обращаться к их envs.

Предупреждения

Предотвращение прорыва через лучшую практику

Во-первых, просто общая (самоуверенная) рекомендация: использовать виртуальные envs больше. Это напрямую не решает проблему, но поможет вам иметь рабочий процесс, который значительно менее подвержен таким ловушкам. Во-первых, вы не должны были принимать такое огромное изменение, а не базу. Лично я редко устанавливаю вещи в базе вне инфраструктуры (emacs, связанные с jupyter, conda и т.д.). 1 Программные пакеты входят в специфичные для проекта или, по крайней мере, в среду разработки.

Например, если бы я делал показанную установку, я бы сделал для нее новый env

conda create -n tf36 anaconda::tensorflow-gpu python=3.6

или любую версию Python, в которой вы действительно хотите работать.

Прямое решение: закрепление

Conda поддерживает закрепление пакетов, и это более прямой способ гарантировать, что вы никогда больше не испортите свою базовую установку, переведя Python 2 на 3. А именно, в папке env conda-meta создайте файл pinned и добавьте строку

python 2.7.*

Обратите внимание, что некоторые пользователи сообщали о похожих проблемах при переходах 3,6 → 3,7, поэтому я считаю, что здесь необходимо добавить дополнительную версию. См. документацию по закреплению.


[1] Обратите внимание, что я использую Miniconda, а не установщик Anaconda, поэтому у меня больше контроля над базой с самого начала.