Анаконда не использует пакет из активированной среды - PullRequest
1 голос
/ 10 марта 2019

У меня есть среда conda в терминале bash с интерпретатором Intel Python Distribution. Однако при импорте пакетов они импортируются из того, что выглядит как каталог пользователя системного Python по умолчанию, а не из среды. Посмотрите на несоответствие версий и __spec__ происхождение пакета pandas.

 ~  $  conda activate idp
 ~  $  which python
~/anaconda3/envs/idp/bin/python
 ~  $  python
Python 3.6.8 |Intel Corporation| (default, Mar  1 2019, 00:10:45) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Intel(R) Distribution for Python is brought to you by Intel Corporation.
Please check out: https://software.intel.com/en-us/python-distribution
>>> import pandas
>>> pandas.__version__
'0.22.0'
>>> pandas.__spec__
ModuleSpec(name='pandas', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f509e184ba8>, origin='/home/torstein/.local/lib/python3.6/site-packages/pandas/__init__.py', submodule_search_locations=['/home/torstein/.local/lib/python3.6/site-packages/pandas'])
>>> 
 ~  $  conda list | head -n 3
# packages in environment at /home/torstein/anaconda3/envs/idp:
#
# Name                    Version                   Build  Channel
 ~  $  conda list | grep pandas
pandas                    0.24.1                   py36_3    intel
 ~  $  conda env list
# conda environments:
#
base                     /home/torstein/anaconda3
idp                   *  /home/torstein/anaconda3/envs/idp
py36                     /home/torstein/anaconda3/envs/py36

При использовании среды base этого не происходит; пакеты (например, pandas) импортируются с правильного пути:

 ~  $  conda deactivate
 ~  $  conda env list
# conda environments:
#
base                  *  /home/torstein/anaconda3
idp                      /home/torstein/anaconda3/envs/idp
py36                     /home/torstein/anaconda3/envs/py36

 ~  $  which python
~/anaconda3/bin/python
 ~  $  python
Python 3.7.0 (default, Oct  9 2018, 10:31:47) 
[GCC 7.3.0] :: Anaconda custom (64-bit) on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
pan>>> pandas.__version__
'0.23.4'
>>> pandas.__spec__
ModuleSpec(name='pandas', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fad808a8e80>, origin='/home/torstein/anaconda3/lib/python3.7/site-packages/pandas/__init__.py', submodule_search_locations=['/home/torstein/anaconda3/lib/python3.7/site-packages/pandas'])

Соответствующая часть .bashrc (без указания анаконды в пути):

export PATH="/home/torstein/.cargo/bin:$PATH"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/intel/lib/intel64_lin:/opt/intel/compilers_and_libraries_2018.0.128/linux/mkl/lib/intel64_lin/"

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/torstein/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/torstein/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/torstein/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/torstein/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup

Что дает эти $PATH с, для base и idp envs соответственно:

 ~  $  echo $PATH
/home/torstein/anaconda3/bin:/home/torstein/anaconda3/condabin:/home/torstein/.cargo/bin:/home/torstein/.cargo/bin:/home/torstein/anaconda3/bin:/home/torstein/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/torstein/.local/bin:/home/torstein/bin
 ~  $  conda activate idp
 ~  $  echo $PATH
/home/torstein/anaconda3/envs/idp/bin:/home/torstein/anaconda3/condabin:/home/torstein/.cargo/bin:/home/torstein/.cargo/bin:/home/torstein/anaconda3/bin:/home/torstein/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/torstein/.local/bin:/home/torstein/bin

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

/home/torstein/anaconda3/envs/idp/lib/python3.6/site-packages/pandas

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Диагностика

Кажется, что есть (или был) другой Python 3.6 в PATH, и я подозреваю, что каким-то образом преобразователь зависимостей Conda в конечном итоге разрешил некоторые пакеты для этой альтернативы site-packages и непреднамеренновключая этот каталог в sys.path.Похоже, это известная проблема .

Доказательства

Причина, по которой я считаю, заключается в том, что модуль pandas загружается отсюда:

/ home / torstein / .local / lib / python3.6 / site-packages / pandas

Если вы включите Python

import sys

sys.path

Я ожидаю, что этодолжен показывать вышеуказанный каталог.

Поскольку сообщалось, что PYTHONPATH пусто (как и должно быть!), это не может быть причиной этой ошибки, поэтому я думаю, что именно Конда каким-то образом настроилаenv следующим образом.

Кроме того, тот факт, что ваш Python 3.7 env не подвержен влиянию, вероятно, вызван тем, что вы не можете загружать модули между различными второстепенными версиями.

Немедленное решение

Почему-товам нужно избавиться от этой зависимости.Есть несколько вещей, которые можно попробовать

  1. Удалите это /home/torstein/.local/ из вашего PATH.Это может вызвать другие проблемы, хотя.Предположительно у вас это есть в PATH, потому что у вас есть другие вещи, не относящиеся к разработке.
  2. Дамп специально для этого каталога site-packages.В комментариях было указано, что это не относится к глобальной установке Python, которая больше не используется, поэтому кажется, что просто избавиться от нее - хорошая вещь.Сделайте резервную копию, однако, на случай, если есть другие зависимости.
  3. Очистите этот путь от sys.path перед импортом модулей.Не уверен в чистом способе сделать это.

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

Долгосрочный обходной путь

Рекомендуемый обходной путь для проблемы GitHub заключается в добавлении следующей переменной среды

export PYTHONNOUSERSITE=True

, которая не позволяет Conda загружать другие локальные каталоги site-packages.При этом вы не должны были столкнуться с проблемой с самого начала.

0 голосов
/ 10 марта 2019

Решение: в anaconda \ env \ xyz (как и в других реализациях) установите переменную окружения path для каталога, в котором установлен 'python.exe'.

По умолчанию python.exe файл в anaconda находится в:

c:\.....\anaconda\env\xyz

после того, как вы это сделаете, очевидно, что команда python работает, в моем случае, получая следующее.

python
Python 3.4.3 |Anaconda 2.2.0. (64|bit)|(default, Nov 7 2015), etc, etc
...