Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to share conda environments across platforms

The conda docs at http://conda.pydata.org/docs/using/envs.html explain how to share environments with other people.

However, the docs tell us this is not cross platform:

NOTE: These explicit spec files are not usually cross platform, and       therefore have a comment at the top such as # platform: osx-64 showing the   platform where they were created. This platform is the one where this spec file is known to work. On other platforms, the packages specified might not be available or dependencies might be missing for some of the key packages already in the spec.  NOTE: Conda does not check architecture or dependencies when installing  from an explicit specification file. To ensure the packages work correctly, be sure that the file was created from a working environment and that it is  used on the same architecture, operating system and platform, such as linux- 64 or osx-64. 

Is there a good method to share and recreate a conda environment in one platform (e.g. CentOS) in another platform (e.g. Windows)?

like image 593
user3731622 Avatar asked Sep 01 '16 20:09

user3731622


People also ask

Can I copy conda environment to another machine?

Conda provides multiple ways of reproducing project environments. Creating a clone of an environment can provide a custom base environment or snapshot of the environment. Spec list and conda-pack create platform and operating system specific copies of an environment.

How do I enable conda environment in another directory?

Navigate to the custom folder where you want to create the new environment. D:\condaEnvs> conda config --append envs_dirs 'D:\condaEnvs\FastAIEnv' --> This will give a name to your newly created conda environment.

Can you have multiple conda environments?

I'd like to mention one more thing here. While you can have multiple environments that contain different versions of Python at the same time on the same computer, you can't set up 32- and 64-bit environments using the same Conda management system.


1 Answers

This answer is given with the assumption that you would like to make sure that the same versions of the packages that you generally care about are on different platforms and that you don't care about the exact same versions of all packages in the entire dependency tree. If you are trying to install the exact same version of all packages in your entire dependency tree that has a high likelihood of failure since some conda packages have different dependencies for osx/win/linux. For example, the recipe for otrobopt will install different packages on Win vs. osx/linux, so the environment list would be different.

Recommendation: manually create an environment.yaml file and specify or pin only the dependencies that you care about. Let the conda solver do the rest. Probably worth noting is that conda-env (the tool that you use to manage conda environments) explicitly recommends that you "Always create your environment.yml file by hand."

Then you would just do conda env create --file environment.yml

Have a look at the readme for conda-env.

They can be quite simple:

name: basic_analysis dependencies:   - numpy   - pandas 

Or more complex where you pin dependencies and specify anaconda.org channels to install from:

name: stats-web channels:   - javascript dependencies:   - python=3.4   # or 2.7 if you are feeling nostalgic   - bokeh=0.9.2   - numpy=1.9   - nodejs=0.10   - flask   - pip:     - Flask-Testing 

In either case, you can create an environment with conda env create --file environment.yaml.

NOTE: You may need to use .* as a version suffix if you're using an older version of conda.

like image 102
Eric Dill Avatar answered Sep 19 '22 19:09

Eric Dill