Jamie Bull
Jamie Bull

Reputation: 13539

Why does my batch script stop after activating a new conda env?

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?

Upvotes: 20

Views: 10039

Answers (3)

Jerry Tian
Jerry Tian

Reputation: 3438

As discussed in the comment by asker @Jamie Bull himself.

I need to be in the environment to continue

In my case, to describe it more precisely, how could I activate a CONDA ENV, change to a working directory directly in one-click, or in one-command?

From a Linux background, we are more likely to complete this request by a simple one-line BASH script. I was facing the same problem with BAT file, as discussed here, CMD batch file's behavior is not that suitable for this task. Using CALL directive within BAT does not help either.

Luckily, CONDA now is packaged with PowerShell's PS1 start script, and the according shortcut left me with another choice, after a few test, it works.

My final solution is to create a Windows shortcut for my purpose, i.e, open PyTorch ENV or Tensorflow ENV in one click. I just made a copy of CONDA's package shortcut, did the edit on the copy itself, than the edited shortcut is ready to use. The screenshot will explain it well.

windows shortcut for CONDA ENV activate

For PS1 script, it is finally as easy as BASH now:

# tf_env.ps1: Activate ENV and go to working directory
conda activate tf-gpu
cd C:\Tensorflow.Playground

Upvotes: 0

Magoo
Magoo

Reputation: 80211

use

call activate %name%
  • I'm assuming that 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.

Upvotes: 38

avloss
avloss

Reputation: 2656

try adding a new line at the end of your .bat file

Upvotes: -2

Related Questions