Подтвердить что ты не робот

Использование conda для установки в python script

В соответствии с этим answer вы можете импортировать пипс из Python script и использовать его для установки модуля. Возможно ли это сделать с помощью conda install?

Документация conda показывает только примеры из командной строки, но я ищу код, который может быть выполнен из Python script.

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

4b9b3361

Ответ 1

Вы можете использовать conda.cli.main. Например, это устанавливает numpy:

import conda.cli

conda.cli.main('conda', 'install',  '-y', 'numpy')

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

-y, --yes Не запрашивать подтверждение.

Ответ 2

Я посмотрел на последний API-интерфейс Conda Python и заметил, что на самом деле есть только 2 открытых модуля с "очень долгосрочной стабильностью":

  1. conda.cli.python_api
  2. conda.api

По вашему вопросу я бы поработал с первым:

ПРИМЕЧАНИЕ: run_command() ниже всегда будет добавлять -y/--yes (т.е. не будет запрашивать подтверждение)

import conda.cli.python_api as Conda
import sys

###################################################################################################
# The below is roughly equivalent to:
#   conda install -y 'args-go-here' 'no-whitespace-splitting-occurs' 'square-brackets-optional'

(stdout_str, stderr_str, return_code_int) = Conda.run_command(
    Conda.Commands.INSTALL, # alternatively, you can just say "install"
                            # ...it probably safer long-term to use the Commands class though
                            # Commands include:
                            #  CLEAN,CONFIG,CREATE,INFO,INSTALL,HELP,LIST,REMOVE,SEARCH,UPDATE,RUN
    [ 'args-go-here', 'no-whitespace-splitting-occurs', 'square-brackets-optional' ],
    use_exception_handler=True,  # Defaults to False, use that if you want to handle your own exceptions
    stdout=sys.stdout, # Defaults to being returned as a str (stdout_str)
    stderr=sys.stderr, # Also defaults to being returned as str (stderr_str)
    search_path=Conda.SEARCH_PATH  # this is the default; adding only for illustrative purposes
)
###################################################################################################


Хорошая вещь об использовании вышеупомянутого - то, что это решает проблему, которая возникает (упомянутый в комментариях выше), когда используется conda.cli.main():

... conda пыталась интерпретировать аргументы командной строки вместо аргументов conda.cli.main(), поэтому использование conda.cli.main(), как это, может не сработать для некоторых вещей.


Другой вопрос в комментариях выше был:

Как [установить пакет], когда канал не по умолчанию?

import conda.cli.python_api as Conda
import sys

###################################################################################################
# Either:
#   conda install -y -c <CHANNEL> <PACKAGE>
# Or (>= conda 4.6)
#   conda install -y <CHANNEL>::<PACKAGE>

(stdout_str, stderr_str, return_code_int) = Conda.run_command(
    Conda.Commands.INSTALL,
    '-c', '<CHANNEL>',
    '<PACKAGE>'
    use_exception_handler=True, stdout=sys.stdout, stderr=sys.stderr
)
###################################################################################################

Ответ 3

Попробуйте следующее:

!conda install xyzpackage

Помните, что это должно быть сделано в Python script, а не в приглашении ОС.

Или вы могли бы попробовать следующее:

import sys от main.cc импортировать main

sys.exit(main())

try:
    import conda
    from conda.cli import main
    sys.argv = ['conda'] + list(args)
    main()