Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I install Anaconda aside an existing pyenv installation on OSX?

Sincerest apologies if this is easily found elsewhere, but although I found a number of posts with pyenv and Anaconda explanations, none addressed this issue specifically. However, I am often an idiot.

On Mac OSX (Mojave 10.14.6) I installed pyenv via Homebrew

brew install pyenv

And I happily install and switch between Python versions with

pyenv install ...

and

pyenv global ...

I typically use VS Code as my IDE.

I now have need to do some work in Anaconda. I haven't used it before. Can I simply install Anaconda via the distribution site and use its navigator, and when I need my old python versions use pyenv and VS Code, or will there be a conflict when I install Anaconda? If there would be a conflict, is there a path to running both on OSX?

I could install it and see what happens of course, and restore from backup if it's a big mess. But I'm hoping that a pyenv / Anaconda guru might have some sage words of advice that would save me potentially hours of cleaning up.

Thanks in advance!

like image 495
Dribbler Avatar asked Aug 24 '19 17:08

Dribbler


People also ask

Can I use anaconda and Pyenv?

Due to resource limitations on Shared Hosting, your processes may be killed when compiling modules. The best solution is to use 'anaconda' or 'miniconda' packages under 'pyenv'.

Where are Pyenv versions stored?

PROTIP: When pyenv is installed, a folder ~/. pyenv is created under your user $HOME folder. Within the shims folder are every Python command in every installed version of Python—python, pip, etc.

How do I add Python to Pyenv?

You can then use pyenv to switch to the specific python version you want to use (globally or locally). Pyenv does this by adding a shim to your $PATH which directs all python and python related tools like pip and easy_install to /. pyenv/shims/python, from here pyenv manages the various versions for us.


2 Answers

There is a conflict, cause both pyenv and conda try to expose a global Python environment by default.

I've been using these tools together and best solution found by me is to

  1. Alway initialize pyenv, use the Python set by pyenv global as the default Python
  2. Only expose command conda but do NOT activate any environment from it

Detail

Since pyenv has been installed on your machine, you only need to install Anaconda.

brew cask install anaconda

Init conda without exposing the "base" environment from conda.

# init conda, the following command write scripts into your shell init file automatically
conda init

# disable init of env "base"
conda config --set auto_activate_base false

Done.

Note: After this setup, the default Python is the one set by pyenv global. Use pyenv and conda to manage environments separately.

Examples of managing virtual environments.

# virtual environments from pyenv
pyenv install 3.6.9
pyenv virtualenv 3.6.9 new-env
pyenv activate new-env
pyenv deactive
# You can also use `pyenv local`


# virtual environments from conda
conda create -n new-env python=3.6
conda env list
conda activate new-env
conda deactivate

Default env location for pyenv is ~/.pyenv/versions.

Default env location for conda, check output from conda info.

Extended Readign

  • Getting started with conda
  • Using Pip in a Conda Environment, very important
  • How do I prevent Conda from activating the base environment by default?
like image 75
Simba Avatar answered Nov 16 '22 00:11

Simba


Not super familiar with conda but I do use pyenv a lot.

Pyenv has its own virtualenv manager that you can use. You can always check which virtualenv version is active with:

pyenv versions

You should see something like:

  system
  20190814_125309
* 3.7.4 (set by /home/tzhuang/.pyenv/version)
  3.7.4/envs/20190814_125309
  3.7.4/envs/buildmaster-sandbox
  3.7.4/envs/HEAD
  3.7.4/envs/myenv
  3.7.4/envs/sandbox
  buildmaster-sandbox
  HEAD
  myenv
  sandbox

Where the * indicates the currently active virtualenv (this can be set using pyenv global like you mentioned). You can manually activate any virtualenv with:

pyenv shell

Eg.

pyenv shell sandbox

Then running pyenv versions gives:

  system
  20190814_125309
  3.7.4 (set by /home/tzhuang/.pyenv/version)
  3.7.4/envs/20190814_125309
  3.7.4/envs/buildmaster-sandbox
  3.7.4/envs/HEAD
  3.7.4/envs/myenv
  3.7.4/envs/sandbox
  buildmaster-sandbox
  HEAD
  myenv
* sandbox

It's generally a good idea to install any packages you want into a new virtualenv instead of the global virtualenv. It makes it easier to debug environment/dependency issues should you run into any.

like image 43
Kapitol Avatar answered Nov 16 '22 00:11

Kapitol