Как правильно установить pip, virtualenv и распространять для Python? - PullRequest
243 голосов
/ 01 декабря 2010

Короткий вопрос

Фон

В моем ответе на ТАК вопрос 4314376 , я рекомендовал использовать ez_setup, чтобы вы могли затем установить pip и virtualenv следующим образом:

curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv

Изначально я извлек эти инструкции из сообщения в блоге Джесси Ноллера Итак, вы хотите использовать Python на Mac? . Мне нравится идея сохранения чистой глобальной директории site-packages, поэтому единственные другие пакеты, которые я устанавливаю, это virtualenvwrapper и distribute. (Я недавно добавил distribute в свою панель инструментов из-за этого объявления Python для публичной службы . Для установки этих двух пакетов я использовал:

sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

Больше никаких setuptools и easy_install

Чтобы действительно следовать объявлению Python для публичной службы , при новой установке Python я бы сделал следующее:

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper

Упрек Глифа

В комментарии к мой ответ на ТАК вопрос 4314376 , ТАК пользователь Символ указано:

NO. НИКОГДА не делайте sudo python setup.py install что угодно. Напишите ~ / .pydistutils.cfg, который помещает вашу установку в pip в ~ / .local или что-то в этом роде. Особенно файлы с именем ez_setup.py имеют тенденцию высасывать новые версии таких вещей, как setuptools и easy_install, которые потенциально могут сломать другие компоненты вашей операционной системы.

Вернуться к короткому вопросу

Итак Ответ глифа приводит меня к моему первоначальному вопросу:

Ответы [ 15 ]

173 голосов
/ 03 марта 2011

Вы можете сделать это, не устанавливая что-либо в сам Python.

Вам не нужны sudo или какие-либо привилегии.

Вам не нужно редактировать файлы.

Установите virtualenv в виртуальную среду начальной загрузки. Используйте эту виртуальную среду, чтобы создать больше. Поскольку virtualenv поставляется с pip и дистрибутивом, вы получаете все за одну установку.

  1. Скачать virtualenv:
  2. Распаковать архив с исходным кодом
  3. Используйте распакованный архив для создания чистой виртуальной среды. Эта виртуальная среда будет использоваться для «начальной загрузки» других. Все ваши виртуальные среды будут автоматически содержать pip и распространяться.
  4. Используя pip, установите virtualenv в эту среду начальной загрузки.
  5. Используйте эту среду начальной загрузки, чтобы создать больше!

Вот пример в bash:

# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv

# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz

Теперь вы можете использовать свою среду начальной загрузки, чтобы создать больше:

# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2

Сходи с ума!

Примечание

Предполагается, что вы не используете действительно старую версию virtualenv. Старые версии требовали флагов --no-site-packges (и в зависимости от версии Python --distribute). Теперь вы можете создать свою среду начальной загрузки с помощью python virtualenv.py path-to-bootstrap или python3 virtualenv.py path-to-bootstrap.

21 голосов
/ 01 декабря 2010

Я думаю, что Glyph означает сделать что-то вроде этого:

  1. Создайте каталог ~/.local, если он еще не существует.
  2. В вашем ~/.bashrc убедитесь, что ~/.local/bin включен PATH и ~/.local включен PYTHONPATH.
  3. Создать файл ~/.pydistutils.cfg, содержащий

    [install]
    prefix=~/.local
    

    Это стандартный файл формата ConfigParser.

  4. Загрузите distribute_setup.py и запустите python distribute_setup.py (нет sudo). Если он жалуется на несуществующий каталог site-packages, создайте его вручную:

    mkdir -p ~ / .local / lib / python2.7 / site-packages /

  5. Запустите which easy_install, чтобы убедиться, что он поступает с ~/.local/bin

  6. Пробег pip install virtualenv
  7. Пробег pip install virtualenvwrapper
  8. Создать виртуальную папку, содержащую env, скажем ~/.virtualenvs
  9. В ~/.bashrc добавить

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh
    

Вот и все, sudo вообще не используется, и ваша среда Python находится в ~/.local, полностью отделенной от Python операционной системы. Отказ от ответственности: Не уверен, насколько совместим virtualenvwrapper в этом сценарии - я не мог проверить это в моей системе: -)

16 голосов
/ 06 февраля 2013

Если вы выполните действия, описанные в нескольких уроках, которые я связал в этом ответе , вы можно получить желаемый эффект без каких-либо сложных «ручных» шагов в ответах Уокера и Винай. Если вы в Ubuntu:

sudo apt-get install python-pip python-dev

Эквивалент достигается в OS X при использовании homebrew для установки python (подробнее здесь ).

brew install python

С установленным pip вы можете использовать его для получения оставшихся пакетов (вы можете опустить sudo в OS X, так как вы используете локальную установку Python).

sudo pip install virtualenvwrapper

(это единственные пакеты, которые вам нужно установить в глобальном масштабе, и я сомневаюсь, что он будет конфликтовать с любым системным уровнем ОС. Если вы хотите быть супер-безопасным, вы можете сохранить версии дистрибутива sudo apt-get install virtualenvwrapper)

Примечание: в Ubuntu 14.04 Я получаю некоторые ошибки при установке pip , поэтому я использую pip3 install virtualenv virtualenvwrapper и добавляю VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 к моему .bashrc/.zshrc файлу.

Затем вы добавляете к вашему .bashrc файлу

export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh

и его источник

. ~/.bashrc

Это в основном так. Теперь единственное решение - хотите ли вы создать virtualenv для включения пакетов системного уровня

mkvirtualenv --system-site-packages foo

там, где существующие системные пакеты не нужно переустанавливать, они связаны с версиями системного интерпретатора. Примечание: вы все еще можете устанавливать новые пакеты и обновлять существующие пакеты из системы без sudo - я протестировал его, и он работает без сбоев системного интерпретатора.

kermit@hocus-pocus:~$ sudo apt-get install python-pandas
kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)kermit@hocus-pocus:~$ deactivate
kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

Альтернатива, если вам нужна полностью отделенная среда, это

mkvirtualenv --no-site-packages bar

или учитывая, что это опция по умолчанию, просто

mkvirtualenv bar

В результате у вас есть новый virtualenv, в который вы можете свободно и без устали устанавливать ваши любимые пакеты

pip install flask
12 голосов
/ 30 января 2014

Python 3.4 и выше

Python 3.3 добавляет модуль venv , а Python 3.4 добавляет модуль surepip . Это делает загрузочный пункт таким же простым, как:

python -murepip

Возможно, ему предшествует вызов venv в виртуальной среде.

Гарантированный пункт описан в PEP 453 .

10 голосов
/ 27 июня 2013

В Ubuntu:

sudo apt-get install python-virtualenv

Пакет python-pip является зависимостью, поэтому он также будет установлен.

5 голосов
/ 01 июля 2013

Обновление: По состоянию на июль 2013 года этот проект больше не поддерживается. Автор предлагает использовать pyenv . (pyenv не имеет встроенной поддержки virtualenv, но хорошо с ней работает.)

Pythonbrew - менеджер версий для Python и поставляется с поддержкой virtualenv.

После установки pythonbrew и python-версии использовать venvs действительно просто:

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle
5 голосов
/ 25 апреля 2013

Я сделал эту процедуру для нас, чтобы использовать на работе.

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other nice package you might want.

Ключевые моменты для безопасности:

  1. curl делает проверку SSL.wget этого не делает.
  2. Начиная с pip 1.3.1, pip также выполняет проверку ssl.
  3. Меньше пользователей могут загрузить архив pypi, чем архив github.
3 голосов
/ 21 марта 2011

Установить ActivePython .Включает в себя pip, virtualenv и Distribute.

3 голосов
/ 01 декабря 2010

Нет проблем с установкой sudo python setup.py, если вы уверены, что это именно то, что вы хотите сделать.

Разница в том, что он будет использовать каталог site-packages вашей ОС какместо назначения копируемых файлов .py

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

2 голосов
/ 07 мая 2017

У меня были различные проблемы (см. Ниже) при установке обновленных модулей SSL, даже внутри virtualenv, поверх более старых версий Python для ОС, поэтому сейчас я использую pyenv.

pyenv упрощает установку новых версий Python и поддерживает virtualenvs.Начало работы на намного проще, чем рецепты для virtualenv, перечисленные в других ответах:

  • На Mac введите brew install pyenv и в Linux используйте pyenv-installer
  • это дает вам встроенную поддержку virtualenv, а также переключение версий Python (при необходимости)
  • хорошо работает с Python 2 или 3, может иметь много установленных версий одновременно

Это очень хорошо работает для изоляции "новой версии Python" и virtualenv от системы Python.Поскольку вы можете легко использовать более позднюю версию Python (публикация 2.7.9), модули SSL уже обновлены, и, разумеется, как и любая современная установка virtualenv, вы изолированы от системных модулей Python.

Несколько приятныхучебные пособия:

Подключаемый модуль pyenv-virtualenv теперь встроен - введите pyenv commands | grep virtualenv для проверки.Я бы не стал использовать плагин pyenv-virtualenvwrapper для начала - посмотрите, как вы работаете с pyenv-virtualenv, который более интегрирован в pyenv, так как он охватывает большую часть того, что делает virtualenvwrapper.

pyenv моделируетсяв rbenv (хороший инструмент для переключения версий Ruby), и его единственная зависимость - bash.

  • pyenv не имеет отношения к очень похожему имени pyvenv - это виртуальный эквивалент, который является частью недавнегоВерсии Python 3 и не обрабатывают переключение версий Python

Предостережения

Два предупреждения о pyenv:

  1. Работает только от bash или аналогичногоshell - или, более конкретно, плагин pyenv-virtualenv не любит dash, что равно /bin/sh в Ubuntu или Debian.
  2. Он должен запускаться из интерактивной оболочки входа (например, bash --login с использованиемтерминал), чего не всегда легко достичь с помощью средств автоматизации , таких как Ansible .

Следовательно, pyenv лучше всего подходит для интерактивного использования и менее подходит для серверов сценариев.

Проблемы с модулем SSL

Одна из причин использования pyenv заключается в том, что существуютчасто возникают проблемы с обновлением модулей Python SSL при использовании более старых системных версий Python:

...