В виртуальной среде Python нет списка установленных пакетов - PullRequest
0 голосов
/ 28 января 2019

Я создал виртуальную среду mdpenv, набрав

$ conda create --name mdpenv

Я активирую ее как

$ source /usr/local/anaconda3/bin/activate mdpenv

Я пытаюсь перечислить все пакеты, установленные в этой среде, что я ожидаюбыть такой же, как базовая среда, но я ничего не получаю:

(mdpenv) $ conda list
# packages in environment at ~/.conda/envs/mdpenv:
#
# Name                    Version                   Build  Channel

Тем не менее, у меня явно установлено много пакетов, например:

(mdpenv) $ python
>>> import numpy
>>> import scipy
>>> import pandas

Почему я не получаюсписок пакетов, которым подвергается моя новая виртуальная среда mdpenv?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Среда Conda обычно поставляется с пакетами по умолчанию.Если вы хотите чистую среду, выполните:

conda create --no-default-packages -n myenv python=3.6

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

conda create --name base --clone myenv

Вы можете изменить поведение пакетов по умолчанию, установленных при создании новой среды, отредактировав файл .condarc. Файл .condarc созданавтоматически в вашем домашнем каталоге при первом запуске:

conda config

Конфигурация соответствует синтаксису YAML.Выбрав редактор, перейдите по адресу:

create_default_packages:
  - pip
  - ipython
  - numpy 
  ...

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

0 голосов
/ 02 февраля 2019

Когда вы вводите python в оболочку (в терминале), он ищет этот файл в каталогах, которые хранятся в переменной среды с именем PATH.Вы можете увидеть значение этой переменной, набрав echo $PATH.

Когда активируется среда conda (включая базовую среду), каталог, в котором хранятся исполняемые файлы, установленные в этой среде, добавляется в PATHпеременная.Поэтому, когда ваша базовая среда активирована, вы увидите что-то вроде

/path/to/anaconda/bin:/usr/local/bin:...

Однако, когда вы активируете среду, conda оставляет базовую среду на PATH и просто добавляет новую среду кfront, как

/path/to/anaconda/envs/mdpenv/bin:/path/to/anaconda/bin:/usr/local/bin:...

Теперь, когда вы создаете пустую среду, conda вообще не устанавливает пакетов (отсюда и пустой вывод conda list).Однако python из базовой среды по-прежнему присутствует в вашем PATH, поэтому, когда вы наберете python, оболочка обнаружит, что Python установлен в базовой среде, и этот Python загрузит все пакеты, установленные в базовой.

Это поведение легко проверить, проверив исполняемый файл, который использует Python, и путь Python для импорта пакетов:

>>> import sys
>>> print(sys.executable)
/path/to/anaconda/bin/python
>>> print(sys.path)
['', '/path/to/anaconda/lib/python37.zip', ...]

Если вы установите python в новую среду,вы обнаружите, что не можете импортировать какие-либо пакеты (поскольку в этой среде не установлено ничего, кроме Python)

...