Почему мой пакетный скрипт останавливается после активации новой среды conda?

Этого достаточно, чтобы воспроизвести проблему:

Сохранить как test.bat

:: Create Conda env
set name=%1
conda create -n %name% python -y
activate %name%
echo "Never gets here"
:: script should continue below...

Запуск из cmd.

>test.bat "testname"

Выход:

C:\Users\Jamie\git>test.bat testname

C:\Users\Jamie\git>set name=testname

C:\Users\Jamie\git>conda create -n testname python -y
Fetching package metadata ...........
Solving package specifications: .

Package plan for installation in environment C:\Users\Jamie\Miniconda2\envs\testname:

The following NEW packages will be INSTALLED:

    pip:            9.0.1-py27_1
    python:         2.7.13-0
    setuptools:     27.2.0-py27_1
    vs2008_runtime: 9.00.30729.5054-0
    wheel:          0.29.0-py27_0

#
# To activate this environment, use:
# > activate testname
#
# To deactivate this environment, use:
# > deactivate testname
#
# * for power-users using bash, you must source
#


C:\Users\Jamie\git>activate testname

(testname) C:\Users\Jamie\git>

Вот и все. Оператор echo не выполняется, но сообщения об ошибке нет.

Почему активация conda env останавливает пакетный скрипт и есть ли способ обойти это?


person Jamie Bull    schedule 09.03.2017    source источник
comment


Ответы (2)


использовать

call activate %name%
  • Я предполагаю, что activate - это пакетный файл. Если вы call сделаете это, обработка вернется после завершения этого пакета. Без call выполнение передается на activate и заканчивается, когда заканчивается activate.
person Magoo    schedule 09.03.2017
comment
Мне нужно быть в окружении, чтобы продолжить - person Jamie Bull; 09.03.2017
comment
@JamieBull Что касается Conda, being in an environment в основном имеет ~ 4 установленных переменных среды. Если вы используете CALL, переменные среды, заданные пакетным файлом активации, будут сохранены при возврате. См.: paste.fedoraproject.org/paste/ - person Nehal J Wani; 10.03.2017

попробуйте добавить новую строку в конец файла .bat

person avloss    schedule 09.03.2017
comment
На самом деле это не конец, просто в примере. Я отредактирую, чтобы было понятно - person Jamie Bull; 09.03.2017
comment
ах, ты прав. подумать об этом - он не может продолжать выполнение - так как вы начали новый сеанс оболочки. То же самое и с ssh. Представьте, что вы делаете run-locally.sh ssh remote@server run-on-the-remote-server.sh удаленную команду, которая никогда не будет выполняться, потому что она вернет вам контроль после входа в систему. - person avloss; 09.03.2017
comment
вы не можете использовать activate (как я понимаю), но вы можете вызвать любой бинарный файл python (вы можете использовать бинарный файл из виртуальной среды напрямую) - не нужно запускать активировать - person avloss; 09.03.2017
comment
О да. На самом деле мне не нужно активировать env до самого конца моего скрипта. Спасибо, теперь думаю разобрались - person Jamie Bull; 09.03.2017
comment
но если бы было решение - выглядело бы оно примерно так. conda activate EVN_NAME --execute second_part_of_the_script.bat - person avloss; 09.03.2017
comment
да - я не думаю, что это возможно, извините, что дал вам неправильное представление. Под этим я хотел сказать, что если, что бы ни случилось после activate, должно быть каким-то образом передано как сценарий на этом этапе. Но это, наверное, невозможно. - person avloss; 09.03.2017
comment
Я пошел с созданием двух сценариев. первый оставляет меня в окружении, затем второй делает все остальное и все равно значительно сокращает мой набор текста! - person Jamie Bull; 09.03.2017