Как установить окружение conda в оффлайн-режиме?
Я хочу создать окружение conda на машине, которая не имеет сетевого подключения. Вот что я сделал до сих пор:
На машине, подключенной к интернету:
conda create -n python3 python=3.4 anaconda
Conda сохранила все необходимые пакеты в каталоге \Anaconda\pkgs
. Я собрал эти пакеты в отдельную папку и перенёс её на машину без сетевого подключения. Путь к этой папке: PATHTO\Anaconda_py3\win-64
.
Я попытался выполнить следующую команду:
conda create -n python=3.4 anaconda --offline --channel PATHTO\Anaconda_py3
Однако я получил сообщение об ошибке:
Fetching package metadata:
Error: No packages found in current win-64 channels matching: anaconda
You can search for this package on Binstar with
binstar search -t conda anaconda
Что я делаю не так? Как мне указать conda создать окружение на основе пакетов из этой директории?
5 ответ(ов)
Вы можете попробовать создать новую среду, клонируя базовую среду root. Для этого выполните следующую команду:
conda create -n yourenvname --clone root
Это позволит создать новую среду yourenvname
, которая будет иметь такие же пакеты и настройки, что и базовая среда.
Краткий ответ: скопируйте всю среду с другого компьютера с такой же операционной системой.
Почему
Зависимости. Пакет зависит от других пакетов. Когда вы устанавливаете пакет через интернет, менеджер пакетов conda
анализирует зависимости пакета и устанавливает все необходимые пакеты автоматически.
Зависимости особенно тяжелы в anaconda
, поскольку anaconda
является метапакетом, который зависит от более чем 160 других пакетов.
Метапакеты — это пакеты, которые не содержат фактического программного обеспечения и просто зависят от других установленных пакетов.
Это совершенно абсурдно загружать все эти зависимости по одному и устанавливать их на оффлайн-устройстве.
Подробное решение
Установите
conda
на другом компьютере с той же ОС. Установите необходимые пакеты в изолированной виртуальной среде.# создайте среду с именем "myvenv", назовите её как хотите # и установите пакет в эту среду conda create -n myvenv --copy anaconda
--copy
используется для
Установка всех пакетов с использованием копий вместо жесткого или символического связывания.
Найдите, где хранятся среды, с помощью команды
conda info
Первое значение ключа "envs directories" — это местоположение. Перейдите туда и упакуйте целую подпапку с именем "myvenv" (имя среды из предыдущего шага) в архив.
Скопируйте архив на ваше оффлайн-устройство. Проверьте "envs directories" в
conda info
. Распакуйте среду из архива в каталог сред на оффлайн-устройстве.Готово.
Пробовали ли вы выполнить команду без опции --offline
?
conda create -n anaconda python=3.4 --channel PATHTO\Anaconda_py3
У меня эта команда работает, если я не подключён к Интернету и если Anaconda уже установлена на машине, но в другом месте. Если же вы подключены к Интернету, при выполнении этой команды вы, скорее всего, получите ошибку, связанную с тем, что что-то не удаётся найти на Binstar.
Директория pkgs не является каналом. Флаг, который вам нужен, это --unknown
, который заставляет conda включать файлы из директории pkgs
, даже если они не найдены в одном из каналов.
Вот что сработало для меня в Linux:
(a) Создайте пустую среду - просто создайте пустую директорию в $CONDA_HOME/envs. Проверьте с помощью команды - conda info --envs
.
(b) Активируйте новую среду - выполните команду source activate <имя_среды>
.
(c) Скачайте соответствующий пакет (*.bz2) с сайта https://anaconda.org/anaconda/repo на машине с подключением к интернету и переместите его на изолированный хост.
(d) Установите с использованием локального пакета - выполните команду conda install <путь_к_пакету>
. Например: conda install python-3.6.4-hc3d631a_1.tar.bz2
, где python-3.6.4-hc3d631a_1.tar.bz2
находится в текущей директории.
Вот и все. Вы можете проверить установку привычными способами (например, python -V
, conda list -n <имя_среды>
). Все связанные пакеты можно установить аналогичным образом.
Как переименовать окружение conda?
В чем разница между pip и conda?
Удаление окружения Conda
Как клонировать список, чтобы он не изменялся неожиданно после присваивания?
Ошибка: "'dict' объект не имеет метода 'iteritems'"