This is enough to reproduce the issue:
Save as test.bat
:: Create Conda env
set name=%1
conda create -n %name% python -y
activate %name%
echo "Never gets here"
:: script should continue below...
Run from cmd.
>test.bat "testname"
Output:
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>
And that's it. The echo statement doesn't execute, but there is no error message.
Why does activating the conda env halt the batch script, and is there a way around it?
With conda, you can create, export, list, remove, and update environments that have different versions of Python and/or packages installed in them. Switching or moving between environments is called activating the environment. You can also share an environment file.
To activate your Conda environment, type source activate <yourenvironmentname> . Note that conda activate will not work on Discovery with this version. To install a specific package, type conda install -n <yourenvironmentname> [package] . To deactivate the current, active Conda environment, type conda deactivate .
Generally, you won't find too much of a difference between conda activate and the old source activate , except that it's meant to be faster, and work the same across different operating systems (the latter difference makes conda activate a huge improvement IMO).
In a batch file, the @ symbol at the start of a line is the same as ECHO OFF applied to the current line only.
use
call activate %name%
activate is a batch file. If you call it, processing will return after that batch is finished. Without the call, execution is transferred to activate and ends when activate ends.If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With