Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I make homebrew's python and pyenv live together?

After switching to python 3.4.3 from 2.7.9 (which was quite simple), I often wish to test some of my scripts with python 2.7.9 before sharing them with colleagues. I am using a OSX yosemite platform with everything compiled from homebrew.

The situation was quite ugly (setting PATHes and PYTHONPATH at each step) - until I discovered pyenv which does this very easily and is easily installed using homebrew. So far, so good.

However, now that I am using this version of python, it does not necessarily play well with that of homebrew. Moreover, I found that I could switch back to the system's python, and more generally that pyenv could access that:

$ pyenv versions   system   2.7.9 * 3.4.3 (set by /usr/local/var/pyenv/version) 

but how could I also add entries for the pythons compiled by homebrew?

like image 410
meduz Avatar asked May 28 '15 07:05

meduz


People also ask

Do I need to install Python before Pyenv?

pyenv is a wonderful tool for managing multiple Python versions. Even if you already have Python installed on your system, it is worth having pyenv installed so that you can easily try out new language features or help contribute to a project that is on a different version of Python.

Can I use pip with Pyenv?

When using pyenv , you should be able to set your 'local' version in the directory you are working in, and then pip will rely on this version.

Where does Python install Pyenv?

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.


2 Answers

You can install pyenv in your home directory (as described in pyenv's installation guide), and then create a symlink at ~/.pyenv/versions to $(brew --cellar)/python:

ln -s $(brew --cellar python)/* ~/.pyenv/versions/ 

The way Homebrew works nowadays, this will pick up both 2.x and 3.x.

like image 164
mipadi Avatar answered Oct 01 '22 09:10

mipadi


A handy function to relink versions:

pyenv-brew-relink() {   rm -f "$HOME/.pyenv/versions/*-brew"    for i in $(brew --cellar python)/*; do     ln -s --force $i $HOME/.pyenv/versions/${i##/*/}-brew;   done    for i in $(brew --cellar python@2)/*; do     ln -s --force $i $HOME/.pyenv/versions/${i##/*/}-brew;   done } 
like image 35
decay_of_mind Avatar answered Oct 01 '22 08:10

decay_of_mind