Как я могу сделать домашние питоны и пиенцы вместе?

После перехода на python 3.4.3 из 2.7.9 (что было довольно просто), я часто хочу проверить некоторые мои скрипты с помощью python 2.7.9, прежде чем делиться ими с коллегами. Я использую платформу OSX yosemite со всем, что составлено из homebrew.

Ситуация была довольно уродливой (установка PATH es и PYTHONPATH на каждом шаге) - пока я не обнаружил pyenv, что делает это очень легко и легко устанавливается с использованием доморощенного. Пока что так хорошо.

Однако теперь, когда я использую эту версию python, она не обязательно хорошо сочетается с версией homebrew. Более того, я обнаружил, что могу вернуться к системному python, и в более общем плане, что pyenv мог получить доступ к этому:

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

но , как я могу добавить записи для python, скомпилированные homebrew?

Ответ 1

Вы можете установить pyenv в свой домашний каталог (как описано в руководстве по установке pyenv), а затем создать символическую ссылку в ~/.pyenv/versions до $(brew --cellar)/python:

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

Как работает Homebrew в настоящее время, это поднимет как 2.x, так и 3.x.

Ответ 2

Хорошо, если вы хотите, чтобы пиенские питоны и доморощенные питоны жили вместе, вам нужно сделать имя доморощенного питонов чем-то другим, кроме версии. В противном случае они столкнутся с именами каталогов, которые использует pyenv. Например, если вы хотите установить pyenv python 2.7.11 и homebrew python 2.7.11, вы можете сделать что-то вроде этого.

for i in `ls $(brew --cellar python)/`; do 
  ln -s $(brew --cellar python)/$i $HOME/.pyenv/versions/$i-brew; 
done

for i in `ls $(brew --cellar python3)/`; do 
  ln -s $(brew --cellar python)/$i $HOME/.pyenv/versions/$i-brew; 
done

По существу, это создаст каталог в $HOME/.pyenv/versions, добавленный с '- brew', чтобы он не столкнулся с пиенскими питонами.

Ответ 3

Просто чтобы добавить к ответу @johnizzo1, python2 теперь является [email protected], поэтому вы должны изменить цикл python3 for на что-то вроде:

for i in 'ls $(brew --cellar python)/'; do 
  ln -s $(brew --cellar python)/$i $HOME/.pyenv/versions/$i-brew; 
done

for i in 'ls $(brew --cellar [email protected])/'; do 
  ln -s $(brew --cellar [email protected])/$i $HOME/.pyenv/versions/$i-brew; 
done