Управляйте версией Python в разных виртуальных средах с помощью pythonbrew

Моя основная системная версия Python — 2.7.3. Я пытаюсь создать virtualenv, использующий версию 3.3.0. Я установил pythonbrew, virtualenv и virtualenvwrapper.

Я следовал этому руководству: http://technomilk.wordpress.com/2011/07/27/setting-up-our-django-site-environment-with-pythonbrew-and-virtualenv/

Что по существу запускает pythonbrew use 3.3.0, а затем создает файл virtualenv. В учебнике говорится, что virtualenv будет использовать версию, которую использует pythonbrew. Но это не так. Virtualenv использует 2.7.3, когда я запускаю его. Когда я делаю pythonbrew use 3.3.0, он покидает виртуальную среду и применяется к системе, а не к среде.

Судя по всему, у pythonbrew есть собственная оболочка virtualenv, у которой есть руководство по адресу: http://suvashthapaliya.com/blog/2012/01/sandboxed-python-virtual-environments/

Хотя я ненавижу так делать. Можно ли использовать virtualenvwrapper вместе с pythonbrew (а не с оболочкой pythonbrew venv), чтобы иметь возможность выбирать, какую версию python использовать для каждого venv, и хранить их отдельно от системной версии python?

Кроме того, я не хочу использовать флаг mkvirtualenv -p, так как это означает, что мне нужно вручную установить python3.3. Я бы предпочел использовать менеджер пакетов для управления версиями Python. Трудно поверить, что ничто в питоне не может сравниться с RVM в рубине... Если я не ошибаюсь?


person darksky    schedule 10.02.2013    source источник


Ответы (1)


Возможно, вам стоит поискать http://pypi.python.org/pypi/pythonbrew/. Когда я это сделал, я использовал pythonbrew для создания venv

pythonbrew install 2.7.3
pythonbrew switch 2.7.3
pythonbrew venv create proj

Работал как чемпион.

Я начал создавать свои виртуальные среды в папке .folder под моим репозиторием git, чтобы я мог избавиться от виртуальной среды, не вмешиваясь в свой код, и перестроить ее, если захочу. Я столкнулся с этой техникой, работая с jenkins, который делает для вас клон git, тогда вам нужно выяснить, как создать вокруг него виртуальную среду.

Python/proj
    .proj           <---- Virtual environment is in here!
        lib
        site-packages
    settings
    requirements
    apps

У меня также есть функция bash, которая работает для меня.

function workon() {
     if [ -d ~/Python/$1 ]
     then
            cd ~/Python/$1
            if [ -d .$1 ]
            then
                . .${1}/bin/activate
            else
                . bin/activate
                cd $1
            fi
     fi
}

Это слишком сложно для работы со старыми проектами, где клон был сделан внутри виртуальной среды, а также с новыми, где виртуальная среда находится внутри проекта.

person boatcoder    schedule 17.02.2013
comment
Если вы прочитали весь мой вопрос, я использовал pythonbrew. Единственная разница в том, что я использовал команду use для переключения на версию Python вместо команды switch для создания файла venv. Когда я использовал команду use и создал venv, у venv была старая версия, а не та, которую я использовал в команде use. Проблема связана с тем, что я использую команду use, а не switch, как вы написали выше? - person darksky; 19.02.2013
comment
На самом деле я думал, что проблема больше связана с попыткой использовать virtualenvwrapper, поэтому я предоставил свой псевдоним для workon, который действительно работает в этом случае. После создания venv вы сможете переключиться на что-то другое, и когда вы активируете venv, вы получите правильную версию в этой среде. Возможно, pythonbrew используется для текущей команды, похожей на LD_LIBRARY=foo runsomething, а переключатель больше похож на export LI_LIBRARY=foo. Но как только вы создадите virtualenv, я думаю, он активируется и будет работать с правильным python. - person boatcoder; 20.02.2013
comment
Когда я использовал вашу инструкцию: pythonbrew venv create proj | Он создал новый python (2.7.6) в этом дереве папок: user/.pythonbrew/venvs/Python-2.7.6/proj ... Как мне теперь установить вещи в этой виртуальной среде? Должен ли я работать из папки Python-2.7.6, которая находится в venvs? Обычно с pythonbrew я бы работал из любой папки, но для этого, похоже, вам нужно работать в этой конкретной папке и также устанавливать здесь дополнительные инструменты/библиотеки. Мы будем очень признательны за ваши отзывы. - person Joe; 13.01.2014
comment
Как только вы активируете virtualenv, pip будет установлен в него, независимо от вашего текущего каталога, когда вы выполняете установку. Здесь ключевое значение имеет активация. - person boatcoder; 13.01.2014
comment
Спасибо, Марк, я понял, что из: pythonbrew venv используйте команду proj. В дереве файлов/папок вы показываете, что ваш фактический код приложения находится в самой папке проекта. Это лучший способ использовать venv? Я думал о том, чтобы сохранить код своего приложения в другом месте, но, похоже, это противоречит цели виртуальной среды. Кроме того, при использовании команды для создания некоторого приложения с файлами/папками в виртуальной среде командной строки будет ли код для создания файлов/папок автоматически перемещаться в папку проекта? - person Joe; 13.01.2014
comment
Нет проблем с размещением venv в другой папке, я держу свой в той же папке по разным причинам, и одной из них является поиск исходного дерева. Возможность копировать их оптом (через архивы) с одной машины на другую. И для CI с jenkins, который должен создать venv, если он не актуален. Я ВСЕГДА запускаю manage.py из папки проекта. Я думаю, что это создаст что-то в текущем каталоге, но я действительно не знаю. - person boatcoder; 13.01.2014
comment
Нет проблем с размещением venv в другой папке, я имел в виду файлы приложений. Скажем, вы создаете приложение django, ваши файлы django останутся в папке venv proj или вы можете хранить свои файлы django где угодно? Извините, если я неправильно понял, так как это не так ясно для меня. - person Joe; 14.01.2014
comment
Вы должны хранить все свои файлы django вместе, но они не должны идти в venv. Я нахожу это более аккуратным. Когда я готов удалить проект, или архивировать его, или искать его, или что-то еще, все в одном месте работает хорошо для меня. Но я знаю, что pyDanny хранит свои env отдельно от своего кода. Все дело предпочтений. В любой момент у меня есть более 10 активных проектов - person boatcoder; 14.01.2014