Я хотел бы обнаружить в общем виде изнутри сеанса Python, управляется ли он кондой.
Несколько идей, которые недостаточно для того, чтобы быть полезными:
1: Использовать переменные среды
Как указано в Как найти имя среды conda, в которой работает мой код?
import os
is_conda = 'CONDA_PREFIX' in os.system or 'CONDA_DEFAULT_ENV' in os.system
Это, похоже, не работает в среде root conda, где эти переменные не всегда определены. Он также имеет потенциальные ложные срабатывания, если conda активируется, когда вы используете другую установку Python.
2: проверьте исполняемый путь
import sys
is_conda = ('anaconda' in sys.executable) or ('miniconda' in sys.executable)
Это будет работать в случае, если пользователи установят anaconda/miniconda в путь по умолчанию. В противном случае это может закончиться. Также легко представить ложные срабатывания.
3. Проверьте информацию о версии
Как указано в ответах на чтобы определить, является ли пользовательская среда python анакондой, вы можете проверить строку версии Python в некоторых случаях:
import sys
is_conda = ('Continuum Analytics' in sys.version) or ('Anaconda' in sys.version)
В настоящее время это работает для Python, установленного по каналу по умолчанию, но это довольно хрупкое и может сломаться в будущем, особенно с изменением названия компании Continuum. Это также, вероятно, не удается, если Python установлен из стороннего источника, такого как conda-forge.
4. Проверьте conda
импорт
try:
import conda
except:
is_conda = False
else:
is_conda = True
Это работает до тех пор, пока вы находитесь в корневой среде conda, но обычно терпите неудачу, если вы находитесь в другой conda env, где пакет conda
не установлен по умолчанию.
5: Попробуйте conda
посмотреть, работает ли он
Предложение от Atto Allas ниже:
import subprocess
try:
retcode = subprocess.call(['conda', 'install', '-y', 'pip'])
except:
is_conda = False
else:
is_conda = (retcode == 0)
Это работает в простейших случаях, но не удается в общем случае использовать несколько ядер в Jupyter, где исполняемый файл conda
может или не может быть подключен к текущему ядру Python.
Есть ли вообще общий способ обнаружения с Python, управляется ли эта установка Python кондой?