Можно установить Anaconda без ** любой ** среды по умолчанию? - PullRequest
0 голосов
/ 24 сентября 2018

Фон

Я хочу избежать "случайной" работы в среде по умолчанию.

Я хочу всегда иметь эквивалент файла requirements.txt или package.json, обачетко отделить один проект от другого, чтобы я мог легко оглянуться назад, чтобы увидеть, что установлено (и какую версию).


Но я работаю в основном в мире науки о данных / аналитики,и в первую очередь с Python.

В качестве такового я использую Anaconda , pip и Homebrew (у меня Mac).Было бы замечательно полагаться только на одного менеджера пакетов , и многие люди поддерживают один метод или другой для достижения этой цели.Правда в том, что на данный момент (сентябрь 2018 г.) невозможно работать в любой тематике и избегать хотя бы некоторого смешения.


Ставя свои прицелы ниже и более реалистично, я просто хочу убедиться,что нет среды по умолчанию везде, где это возможно, чтобы сделать ее более чистой и удобной для работы над проектами с другими.

Насколько мне известно, в Homebrew вообще нет концепции среды.Конда, конечно, имеет среды, но сначала она устанавливает среду по умолчанию, прежде чем вы сможете создавать другие.

Вопрос

Есть ли способ установить Anaconda без какой-либо среды по умолчанию так что мне всегда придется source activate <my_env>?Если да, то как мне это сделать?

Если не считать этого, каковы наилучшие предложения для достижения того, чего я хочу, то есть , чтобы случайно не работать в среде, где неясно, каковы мои зависимости , понимая, что я говорю в первую очередь, но не исключительно об использовании Python?

(Пожалуйста, не предлагайте мне "просто быть осторожным" при установке пакетов. Да, я понимаю. Но ястараясь быть осторожным, делая неправильные выборы настолько трудными или невозможными, насколько это возможно. Если бы, например, у меня не было среды по умолчанию, pip не работало бы, пока я не нашел среду, поскольку ее не было бы вмое нормальное окружение.)

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Сначала я бы удалил python из моей системы.

Редактировать : Как указано в комментариях, это нехорошая идея в macos.Я бы использовал этот подход только в контейнере Docker.Но тогда, если у вас есть докер, вы можете создать по одному для каждого проекта, и все готово.

Команда which python ничего не должна возвращать.

Установка miniconda который является менеджером пакетов conda вместе с чистым python.

Создание среды для проекта

conda create -n myproject python=3.6

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

source activate myproject

Обратите внимание, что технически miniconda создает env по умолчанию, называемый "base" (его нельзя удалить).Но, как и любой другой env, он не активирован, поэтому у вас по-прежнему не будет питона (если вы удалили его, как предлагалось), и вы не сможете случайно запустить «неправильный» питон.

0 голосов
/ 09 октября 2018

Я думаю, что вам лучше всего просто использовать виртуальную среду и устанавливать зависимости по мере необходимости, а затем просто регистрироваться и выходить из вашей виртуальной среды по мере продвижения вашей работы.Вы можете создавать разные виртуальные среды, работая над разными проектами, и оставлять соответствующие им файлы require.txt внутри каталога, который Python создает при установке виртуальной среды.Допустим, у меня есть python3.5.2 в качестве моего обычного пакета go-to-python (потому что я так делаю).

Использование python3.5 позволяет нам войти в виртуальную среду, в которой нет ничего, кроме голого python3.5 (без установленных зависимостей).Для этого:

[dkennetz@node venv_test]$ python -m venv my_SO_project
[dkennetz@node venv_test]$ ls
my_SO_project

Итак, Python создал каталог для размещения моей виртуальной среды, но моя виртуальная среда не используется в качестве моего Python по умолчанию.Чтобы сделать это, мы должны активировать его:

[dkennetz@node venv_test]$ source ./my_SO_project/bin/activate

Итак, моя оболочка теперь выглядит так:

(my_SO_project) [dkennetz@nodecn201  venv_test]$

Пока мы здесь, давайте посмотрим, как выглядят наши требования:

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ ls -alh
drwxr-x---  3 dkennetz blank 4.0K Oct  9 09:52 .
drwxr-x--- 93 dkennetz root      16K Oct  9 09:40 ..
drwxr-x---  5 dkennetz blank 4.0K Oct  9 09:47 my_SO_project
-rwxr-x---  1 dkennetz blank    0 Oct  9 09:47 requirements.txt

Использование пробела для скрытия названий групп, но, как мы видим, размер нашего файла require.txt пуст, что означает, что эта виртуальная среда не имеет зависимостей.Это чисто python3.5.Теперь давайте установим pandas и посмотрим, как меняются наши зависимости.

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip install pandas
(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ more requirements.txt
numpy==1.15.2
pandas==0.23.4
python-dateutil==2.7.3
pytz==2018.5
six==1.11.0
(my_SO_project) [dkennetz@nodecn201  venv_test]$ wc -l requirements.txt
5 requirements.txt

Допустим, мы написали некоторый код внутри среды и больше не хотим выполнять какую-либо работу, поэтому мы делаем одно окончательное замораживание пипса> require.txt и оставляем:

(my_SO_project) [dkennetz@nodecn201  venv_test]$ deactivate
[dkennetz@nodecn201  venv_test]$ pip freeze > requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ wc -l requirements_normal.txt
82 requirements_normal.txt

Появилось гораздо больше зависимостей, но ничего не изменилось в нашей обычной среде, и ничего не изменилось в нашей виртуальной среде.Теперь давайте предположим, что мы взяли остаток выходного дня и хотим вернуться к нашему SO_project, который мы создали вчера.Ну, это легко:

[dkennetz@nodecn201  venv_test]$ ls -alh
drwxr-x---  3 dkennetz blank 4.0K Oct  9 10:01 .
drwxr-x--- 93 dkennetz root      16K Oct  9 09:40 ..
drwxr-x---  5 dkennetz blank 4.0K Oct  9 09:47 my_SO_project
-rwxr-x---  1 dkennetz blank   77 Oct  9 09:56 requirements.txt
-rwxr-x---  1 dkennetz blank 1.3K Oct  9 10:01 requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ source ./my_SO_project/bin/activate
(my_SO_project) [dkennetz@nodecn201  venv_test]$ 

Давайте посмотрим, где мы остановились (у нас должны быть установлены только панды, давайте перезапишем наш старый файл_приятий):

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ more requirements.txt
numpy==1.15.2
pandas==0.23.4
python-dateutil==2.7.3
pytz==2018.5
six==1.11.0

Классно, теперь мы знаеммы просто там, где мы остановились.Просто честное предупреждение, у меня есть установленный pandas в моем корневом пакете python, но чего у меня нет, так это awscli (интерфейс командной строки веб-сервисов amazon).Допустим, я хочу этого по какой-то причине в моем пакете:

(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip install awscli
(my_SO_project) [dkennetz@nodecn201  venv_test]$ pip freeze > requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ wc -l requirements.txt
15 requirements.txt
(my_SO_project) [dkennetz@nodecn201  venv_test]$ deactivate
[dkennetz@nodecn201  venv_test]$ ls
my_SO_project  requirements.txt  requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ pip freeze > requirements_normal.txt
[dkennetz@nodecn201  venv_test]$ wc -l requirements_normal.txt
82 requirements_normal.txt

Итак, теперь мы видим, что установка awscli не внесла изменений в наш пакет python, но она сделала для нашего venv:

[dkennetz@nodecn201  venv_test]$ more requirements_normal.txt
appdirs==1.4.3
arrow==0.7.0
attrdict==2.0.0
avro-cwl==1.8.4
...
[dkennetz@nodecn201  venv_test]$ more requirements.txt
awscli==1.16.29
botocore==1.12.19
colorama==0.3.9
docutils==0.14
...

Наконец, скажем, вы разработали супер крутой пакет данных для науки полностью внутри вашей виртуальной машины и сделали его пригодным для установки на pip.Это просто и быстро:

[dkennetz@nodecn201  venv_test]$ pip install -r requirements.txt

Теперь вы можете использовать это в качестве списка пакетов каждый раз, когда ваша «новая программа» устанавливается в pip, и, что еще лучше, вы знаете каждый необходимый вам пакет pythonпотому что это единственные, которые вы включили в свою среду.

При всем этом, нет никаких причин, по которым вы не можете делать это каждый раз, когда начинаете новый проект с новыми людьми.И если вы хотите использовать anaconda в каждой виртуальной среде, которую вы когда-либо используете, установите anaconda обычным образом:

[dkennetz@nodecn201  venv_test]$ ./Anaconda-1.6.0-Linux-x86_64.sh
[dkennetz@nodecn201  venv_test]$ source /home/dkennetz/anaconda3/bin/activate
#You will be in your anaconda environment now
(base) [dkennetz@nodecn201  venv_test]$ pip freeze > anaconda_reqs.txt

Допустим, вы запустили my_SO_project2 сейчас, после того первого, и вы хотите убедиться, что у вас есть anaconda в этомпакет.создайте свой новый venv так же, как в прошлый раз.Оказавшись внутри, просто установите все зависимости, которые требуются anaconda, и у вас будет свежая виртуальная среда anaconda:

(my_SO_project2) [dkennetz@nodecn201  venv_test]$ pip install -r anaconda_reqs.txt

И ваш новый venv начнет работать как свежая среда, в которой не установлено ничего, кроме anaconda.

Iнадеюсь, это прояснит то, что я сказал в комментариях, и будет полезно для вас.

...