Как использование 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. Вы можете выполнять все следующие действия из любого каталога, поэтому, возможно, используйте временную загрузку или куда угодно, куда бы вы ни поместили загрузки. Пожалуйста, сообщите в комментариях, если это работает или нуждается в корректировке!
Загрузите соответствующую 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
Временно установите CONDA_ROOT_PREFIX
в основу вашей установки. Обычно это папка anaconda3
или miniconda3
; в этом случае мы будем использовать путь, заданный OP:
export CONDA_ROOT_PREFIX=/home/me/anaconda2
Проверьте, что это работает:
./conda-exec info
Ключевым моментом, который нужно проверить, является то, что base environment:
правильно определяет, где находится ваш базовый env, и показывает его как (writable)
. Вы также должны увидеть папку pkgs
в своей базе env в package cache:
.
Вариант 1. Возвращение к предыдущей редакции
Определите ревизию непосредственно перед текущей (мы будем обозначать ее здесь <k-1>
) и попытайтесь восстановить ее:
./conda-exec list -n base --revisions
./conda-exec install -n base --revision <k-1>
Если это работает, вы должны быть сделаны. Запустите новую оболочку и попробуйте снова использовать conda
. В противном случае, другой вариант...
Вариант 2. Установите conda
для текущего Python
(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, поэтому у меня больше контроля над базой с самого начала.