ArcGIS Blog

Developers

ArcGIS Pro

Conda Init and ArcGIS Pro

By Hannes Ziegler

If you’ve been working in the ArcGIS Pro Python environment extensively, you may have noticed that the Python installation that ships with ArcGIS is fully isolated from any other Python installation on your machine. Although this isolation is intentional, it can be inconvenient for users who want to access conda (and Python) outside the pathways provided by ArcGIS, such as the default Windows PowerShell or Command Prompt (CMD). Fortunately, the conda init command is now enabled for ArcGIS Pro 3.1, which allows users to access conda and Python easily from their preferred shells. In this blog, we’ll explore how the conda init command works with ArcGIS Pro, how to use it effectively, and what benefits it brings.

Conda is a powerful package and environment manager that lets you create isolated environments with specific versions of packages, including Python and other dependencies. Conda is included with ArcGIS Pro and ArcGIS Enterprise and is integrated with the Package Manager interface in ArcGIS Pro.

While the Package Manager is sufficient for many users, some users require the more granular control offered by the Command Line Interface (CLI) for conda. As stated earlier, we purposely keep conda isolated by default. We don’t modify your Windows PATH environment variable, nor do we initialize conda for you. We do this to avoid interfering with any existing installations of conda, allowing other conda and Python installations to work alongside the one provided with ArcGIS Pro. This means that you do not have direct access to conda or Python environments from the standard CMD or PowerShell. Instead, we provide the “Python Command Prompt” for ArcGIS Pro or “Python 3 Command Prompt” for ArcGIS Server (from the Windows start menu or via the proenv batch script), which runs a profile customized to let you work seamlessly with conda and Python alongside ArcGIS. However, some users may prefer to work from the standard PowerShell or CMD.

Up until now, if you wanted to run conda commands from the command line, you had to use the Python Command Prompt or perform some additional manual setup. This gets easier with the conda init command, part of the conda environment model. In a nutshell, the conda init command allows you to easily initialize your preferred shell to use conda without making error-prone or inconvenient changes, which we recommend against, like modifying your PATH manually or specifying the full path to the executable. Behind the scenes, conda init adds startup logic to your preferred shell, ensuring that it is permanently configured to work with conda. You can then activate and deactivate conda environments, install and update packages, and manage your conda configuration, all from your preferred shell.

Be aware that if you are using a separate installation of conda on your machine, the last install that ran conda init will be the default on the shell. It will be up to you to manage any potential for the two independent instances of conda to clash with one another.

Getting set up

We’ll set up both the standard PowerShell and CMD at the same time. Open PowerShell to get started.

First, you’ll need to set the execution policy to remotesigned to allow the signed conda code to execute. Run the following:

set-executionpolicy remotesigned -scope currentuser

Running set-executionpolicy remotesigned -scope currentuser in PowerShell.

Now you’re ready to initialize both shells. You can do so with the following command:

& 'C:\Program Files\ArcGIS\Pro\bin\Python\condabin\conda.bat' init

Run & 'C:\Program Files\ArcGIS\Pro\bin\Python\condabin\conda.bat' init from PowerShell.

After running conda init, you may need to close and restart your shell for the changes to take effect.

And voila! Next time you open the standard CMD or PowerShell, you will have access to conda.

Accessing conda from the PowerShell.
Accessing conda and Python from the PowerShell.
Accessing conda from the Command Prompt.
Accessing conda and Python from the Command Prompt.

If you’d like to reverse the conda init operation and return to the ArcGIS Pro conda installation being isolated, run the following:

& 'C:\Program Files\ArcGIS\Pro\bin\Python\condabin\conda.bat' init --reverse

The conda init command adds access to conda commands to the standard PowerShell and CMD. You’ll also notice some differences between your experience in the standard CMD or PowerShell from that in the Python Command Prompt. For example, the standard CMD or PowerShell does not keep the active environment in sync with the environment active in ArcGIS Pro. While PowerShell starts with a conda environment activated, the standard CMD does not. Also, when running conda commands from the Python Command Prompt, you can run some commands like activate without explicitly prefixing it with conda. However, when using your preferred shell, you should start your commands with conda.

Additionally, conda init does not inherently add access to Esri- developed commands such as proswap to the standard PowerShell and CMD. To access these from your preferred shell, you need to activate the base environment or use the full path to their script in ArcGIS\Pro\bin\Python\Scripts. A current limitation is that PowerShell also does not properly support using the conda env export command. Instead, you need to use Esri’s conda-env export command. From PowerShell only, you can use the aliases genv as shorthand for conda env list, etenv for conda activate env, and exenv for conda deactivate.

The Python Command Prompt is slightly more integrated with ArcGIS workflows, and we still recommend using it for managing your ArcGIS environments. For all other purposes, however, having conda available from your preferred shell is still a major convenience.

Wrapping up

We hope this blog post has been helpful in shedding light on how to use conda init to make accessing conda from your preferred shell more convenient. While the Python Command Prompt is still the recommended choice for working with ArcGIS Pro environments, conda init provides more flexibility for users. If you’re ever unsure about using this feature, remember that you can always reverse the changes using the --reverse option. We appreciate you taking the time to read our blog and we hope you found the information useful. Happy coding!

Share this article

Subscribe
Notify of
0 Comments
Oldest
Newest
Inline Feedbacks
View all comments