Каков правильный способ установки pip, virtualenv и дистрибутива для Python?
Короткий вопрос
Фон
В мой ответ на вопрос SO 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?. Мне нравится идея сохранения чистого каталога сайтов-сайтов, поэтому только другие пакеты, которые я устанавливаю там, 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
Подтверждение глифа
В комментарии к моему ответу на SO вопрос 4314376, пользователь SO Glyph:
НЕТ. НИКОГДА НЕ выполняйте sudo python setup.py install
все. Напишите файл ~/.pydistutils.cfg, который добавит вашу установку pip в ~/.local или что-то еще. Особенно файлы с именем ez_setup.py
имеют тенденцию высасывать более новые версии таких вещей, как setuptools и easy_install, что может потенциально нарушить другие вещи в вашей операционной системе.
Вернуться к короткому вопросу
Итак Ответ на глиф приводит меня к моему первоначальному вопросу:
Ответы
Ответ 1
Вы можете сделать это, не установив ничего в сам python.
Вам не нужны sudo или какие-либо привилегии.
Вам не нужно редактировать какие-либо файлы.
Установите virtualenv в виртуальную среду bootstrap. Используйте эту виртуальную среду, чтобы создать больше. Поскольку virtualenv поставляется с пипсом и распространяется, вы получаете все от одной установки.
- Загрузить virtualenv:
- Распаковать исходный архив
- Используйте распакованный tarball для создания чистой виртуальной среды. Эта виртуальная среда будет использоваться для "начальной загрузки" других. Все ваши виртуальные среды будут автоматически содержать pip и распространять.
- Используя pip, установите virtualenv в среду бутстрапа.
- Используйте эту загрузочную среду, чтобы создать больше!
Вот пример в 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
Теперь вы можете использовать среду "bootstrap", чтобы создать больше:
# 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
.
Ответ 2
Я думаю, что Glyph означает сделать что-то вроде этого:
- Создайте каталог
~/.local
, если он еще не существует.
- В
~/.bashrc
убедитесь, что ~/.local/bin
включен PATH
и что ~/.local
включен PYTHONPATH
.
-
Создайте файл ~/.pydistutils.cfg
, содержащий
[install]
prefix=~/.local
Это стандартный файл в формате ConfigParser.
-
Загрузить distribute_setup.py
и запустите python distribute_setup.py
(no sudo
). Если он жалуется на несуществующий каталог site-packages
, создайте его вручную:
mkdir -p ~/.local/lib/python2.7/site-packages/
-
Запустите which easy_install
, чтобы убедиться, что он исходит из ~/.local/bin
- Запустить
pip install virtualenv
- Запустить
pip install virtualenvwrapper
- Создайте папку, содержащую виртуальную env, скажем
~/.virtualenvs
-
В ~/.bashrc
добавить
export WORKON_HOME
source ~/.local/bin/virtualenvwrapper.sh
Чтобы он вообще не использовался sudo
, а ваша среда Python находится в ~/.local
, полностью отделена от ОС Python. Отказ от ответственности: не уверен, насколько совместим virtualenvwrapper
в этом сценарии - я не смог проверить его в своей системе: -)
Ответ 3
Если вы выполните шаги, указанные в нескольких учебниках, которые я связал в этом ответе, вы
может получить желаемый эффект без нескольких сложных "ручных" шагов в ответах Уокера и Винай. Если вы на 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 - я протестировал его, и он работает без каких-либо сбоев в работе системного интерпретатора.
[email protected]:~$ sudo apt-get install python-pandas
[email protected]:~$ mkvirtualenv --system-site-packages s
(s)[email protected]:~$ pip install --upgrade pandas
(s)[email protected]:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)[email protected]:~$ deactivate
[email protected]:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0
Альтернативой, если вы хотите полностью изолированную среду, является
mkvirtualenv --no-site-packages bar
или если задана опция по умолчанию, просто
mkvirtualenv bar
В результате у вас есть новый virtualenv, где вы можете свободно и грубо установить свои любимые пакеты
pip install flask
Ответ 4
Python 3.4 вперед
Python 3.3 добавляет модуль venv, а Python 3.4 добавляет модуль обеспечения. Это делает загрузочный диск проще:
python -m securitypip
Возможно, предшествует вызов venv
, чтобы сделать это внутри виртуальной среды.
Гарантированный пипс описан в PEP 453.
Ответ 5
В Ubuntu:
sudo apt-get install python-virtualenv
Пакет python-pip
является зависимым, поэтому он также будет установлен.
Ответ 6
Обновление: По состоянию на июль 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
Ответ 7
Я сделал эту процедуру для использования на работе.
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.
Ключевые моменты для безопасности:
- curl делает проверку ssl. wget не делает.
- Начиная с pip 1.3.1, pip также выполняет проверку ssl.
- Меньше пользователей может загружать архив pypi, чем tar файл github.
Ответ 8
Нет проблем с установкой sudo python setup.py, если вы уверены, что хотите сделать.
Разница в том, что он будет использовать каталог сайтов-пакетов вашей ОС в качестве места назначения для файлов .py, которые нужно скопировать.
поэтому, если вы хотите, чтобы точка доступа была доступна широкой, возможно, путь. Я не говорю, что другие дороги плохие, но это, вероятно, достаточно справедливо.
Ответ 9
Установить ActivePython. Он включает в себя pip, virtualenv и Distribute.
Ответ 10
Недавно я столкнулся с той же проблемой. Я становлюсь более частичным для мышления "всегда использовать виртуальный", поэтому моя проблема заключалась в том, чтобы установить virtualenv с помощью pip без установки дистрибутива в мой глобальный или пользовательский каталог сайтов. Для этого я вручную загрузил дистрибутив, pip и virtualenv, и для каждого из них я запускал "python setup.py install --prefix ~/.local/python-private" (с временной установкой PYTHONPATH = ~/.local/python-private), чтобы скрипты установки могли найти дистрибутив). Ive переместил virtualenv script в другой каталог, который у меня есть на моем PATH, и отредактировал его, чтобы модули распространения и virtualenv можно было найти на sys.path. Tada: Я не устанавливал ничего в каталог /usr,/usr/local или my user site-packages, но я могу запускать virtualenv в любом месте, и в этом virtualenv я получаю pip.
Ответ 11
-
Вы можете сделать это, не устанавливая ничего в сам python.
-
Вам не нужны sudo или какие-либо привилегии.
-
Вам не нужно искать последнюю версию tar файла virtualenv
-
Вам не нужно редактировать информацию о версии в bash script, чтобы поддерживать актуальность.
-
Вам не нужно устанавливать curl
/wget
или tar
, а не pip
или easy_install
Сохраните следующее значение в /tmp/initvenv.py
:
from __future__ import print_function
import os, sys, shutil, tempfile, subprocess, tarfile, hashlib
try:
from urllib2 import urlopen
except ImportError:
from urllib.request import urlopen
tmp_dir = tempfile.mkdtemp(prefix='initvenv_')
try:
# read the latest version from PyPI
f = urlopen("https://pypi.python.org/pypi/virtualenv/")
# retrieve the .tar.gz file
for line in f.read().splitlines():
if isinstance(line, bytes):
line = line.decode('utf-8')
if 'tar.gz<' not in line:
continue
for url in line.split('"'):
if url.startswith('http'):
url, md5 = url.split('#')
assert md5.startswith('md5=')
md5 = md5[4:]
break
else:
continue
break
else:
print('tar.gz not found')
sys.exit(1)
file_name = url.rsplit('/', 1)[1]
print(file_name)
# url = "https://pypi.python.org/packages/source/v/virtualenv/" + file_name
os.chdir(tmp_dir)
with open(file_name, 'wb') as fp:
data = urlopen(url).read()
data_md5 = hashlib.md5(data).hexdigest()
if md5 != data_md5:
print('md5 not correct')
print(md5)
print(data_md5)
sys.exit(1)
fp.write(data)
tar = tarfile.open(file_name)
tar.extractall()
tar.close()
os.chdir(file_name.replace('.tar.gz', ''))
print(subprocess.check_output([sys.executable, 'virtualenv.py'] +
[sys.argv[1]]).decode('utf-8'), end='')
if len(sys.argv) > 2:
print(subprocess.check_output([
os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] +
sys.argv[2:]).decode('utf-8'), end='')
except:
raise
finally:
shutil.rmtree(tmp_dir) # always clean up
и использовать его как
python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]
например. (если вам действительно нужен уровень совместимости distribute
для setuptools
)
python /tmp/initvenv.py venv distribute
Обратите внимание, что с более старыми версиями python это может дать вам InsecurePlatformWarning
s¹.
После того, как у вас есть ваш virtualenv (имя, например, venv
), вы можете настроить другой virtualenv с помощью только что установленного virtualenv
:
venv/bin/virtualenv venv2
virtualenvwrapper
Я рекомендую взглянуть на virtualenvwrapper, после однократной установки:
% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper
и активация (может быть выполнена из вашего логина script):
% source venv/bin/virtualenvwrapper.sh
вы можете делать такие вещи, как:
% mktmpenv
New python executable in tmp-17bdc3054a46b2b/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-17bdc3054a46b2b)%
¹ Я не нашел способа подавить предупреждение. Его можно решить в pip
и/или request
, но разработчики указывают друг на друга в качестве причины. Я получил часто нереалистичную рекомендацию обновить версию python, которую я использовал до последней версии. Я уверен, что это сломается, например, мой Linux Mint 17. К счастью, pip
кэширует пакеты, поэтому предупреждение сделано
только один раз для установки пакета.
Ответ 12
У меня были различные проблемы (см. ниже) установку обновленных модулей 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 уже обновлены и, конечно, как и любая современная виртуальная система, вы изолированы от системных модулей Python.
Несколько хороших учебников:
Плагин pyenv-virtualenv
теперь встроен в тип pyenv commands | grep virtualenv
для проверки. Я бы не использовал плагин pyenv-virtualenvwrapper для начала - посмотрите, как вы переходите к pyenv-virtualenv, который более интегрирован в pyenv, так как это покрывает большую часть того, что делает virtualenvwrapper.
pyenv
смоделирован на rbenv
(хороший инструмент для переключения версии Ruby), и его единственная зависимость bash.
- pyenv не имеет отношения к так называемому
pyvenv
, который является виртуальным эквивалентом той части последних версий Python 3 и не обрабатывает переключение версии Python
Предостережения
Два предупреждения о pyenv:
- Он работает только из bash или аналогичной оболочки - или, более конкретно, плагин pyenv-virtualenv не похож на
dash
, который является /bin/sh
на Ubuntu или Debian.
- Он должен запускаться из интерактивной оболочки входа (например,
bash --login
с использованием терминала), чего не всегда легко достичь с помощью средств автоматизации таких как анзибль.
Следовательно, pyenv лучше всего подходит для интерактивного использования и менее хорош для серверов сценариев.
Проблемы с модулем SSL
Одна из причин использования pyenv
заключается в том, что часто возникают проблемы с обновлением модулей Python SSL при использовании более старых системных версий Python:
Ответ 13
На официальном сайте Virtualenv есть хорошие инструкции. https://pypi.python.org/pypi/virtualenv
В основном, что я сделал, устанавливается pip
с sudo easy_install pip
, затем используется sudo pip install virtualenv
, а затем создала среду с: virtualenv my_env
(назовите ее так, как вы хотите), после чего я сделал: virtualenv --distribute my_env
; который установил distribute
и pip
в моем virtualenv.
Снова следуйте инструкциям на странице virtualenv
.
Вид хлопот, исходящий от Ruby; P
Ответ 14
Вот хороший способ установить virtualenvwrapper (обновление этого).
Загрузите virtualenv-1.11.4 (вы можете найти последнюю версию здесь), разархивируйте его, откройте terminal
# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate
# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs
# append it to file `.bashrc`
$ vi ~/.bashrc
source ~/bootstrapenv/bin/activate
export WORKON_HOME=~/bootstrapenv/Envs
source ~/bootstrapenv/bin/virtualenvwrapper.sh
# run it now.
$ source ~/.bashrc
Вот и все, теперь вы можете использовать mkvirtualenv env1
, lsvirtualenv
..etc
Примечание: вы можете удалить virtualenv-1.11.4
и virtualenv-1.11.4.zip
из папок загрузок.
Ответ 15
Хорошей новостью является то, что если вы установили python3.4, pyvenv уже установлен. Итак, Just
pyvenv project_dir
source project_dir/bin/activate
python --version
python 3.4.*
Теперь в этом виртуальном env вы можете использовать pip для установки модулей для этого проекта.
Оставьте это виртуальное env, просто
deactivate