2015-02-02 1 views
2

Я новичок в установке Django и Python. Промежуточное соединение с Ubuntu 14.04.Как получить Django 1.7, работающий над Ubuntu 14.04 с nginx и virtualenv с использованием python 2.7 при установке python 3.4?

Это мои установки до сих пор в моем Ubuntu 14.04.

apt-get install python3-setuptools --force-yes -y ## for python3 
easy_install3 pip ## for python3 
apt-get install python-setuptools --force-yes -y ## for python2.7 or above 
easy_install pip ## for python2.7 or above 
apt-get install python-dev --force-yes -y ## because ubuntu 14.04 does not have dev version of python 2 
apt-get install python3-dev --force-yes -y ## because ubuntu 14.04 does not have dev version of python 3.4 
apt-get install links --force-yes -y ##a command line web browser 
apt-get install python-flup --force-yes -y ## connects python to uwsgi) 

apt-get install build-essential --force-yes -y ## 

pip2 install django uwsgi virtualenv ## use pip to install django and uwsgi and virtualenv for python2 
pip3 install django uwsgi ## use pip to install django and uwsgi for python3 

Для полного списка, пожалуйста, смотрите на https://gist.github.com/simkimsia/41c55e0c08eda42e2cb3#file-install-sh-L88

Я запутался об использовании virtualenv.

Я хочу как можно больше подготовить серверную версию ubuntu 14.04 для уровня производительности Django 1.7.

Причина, по которой я установил несколько условий Python, потому что у меня могут быть запущены другие приложения на Python, для которых требуется 3.4.

Мои Джанго файлы из репозитория Bitbucket и я мерзавец клонировали их в /var/virtual/WebApps/DjangoProject

Внутри /var/virtual/WebApps/DjangoProject, у меня есть manage.py и другие файлы и папки.

Просьба сообщить, как я могу запустить проект Django для этой ситуации.

В настоящее время я тестирую эту настройку на своем виртуальном боксе и бродяжнике.

EDIT

Там будет по крайней мере 2 Django приложения. 1 требует 2.7 питона. Другой требует 3.4 python.

Позвольте мне добавить, что это единственный сервер, на котором будут размещаться приложение, интерфейс и база данных.

EDIT 1

Я перезапущена с новой установки Ubuntu 14.04, и я начал с Python 2.7.6 и Python 3.4.0.

Я тогда сделал sudo apt-get install python-virtualenv, который я проверил его версию: 1.11.4.

Я создал ~/virtualenvs/py2.7 и ~/virtualenvs/py3.4.

Внутри ~/virtualenvs, я virtualenv -p /usr/bin/python2 py2.7 и ~/virtualenvs, я сделал virtualenv -p /usr/bin/python3 py3.4

Так как же установить python2 только библиотеки для приложения Python 2?

E.g. являются django-adminfiles, sorl-thumbnail, psycopg2

EDIT 5

Использование virtualenv --system-site-packages -p /usr/bin/python2 py2.7 вместо

ответ

4

I возобновились с новой установки Ubuntu 14.04 и я начал с Python 2.7.6 и Python 3.4.0.

Хорошо, так что теперь в вашей системе есть две базовых версии Питона. Базовая версия просто означает версии, поддерживаемые вашей операционной системой; которые вы установили глобально.

Другими словами, вы установили их с помощью установщиков пакетов операционной системы и не скомпилировали их отдельно.

На практике это выше только в Linux, потому что в Windows вы не можете установить «локально», не пройдя несколько обручей; все инсталляторы Python регистрируются в реестре, тем самым делая их глобальными, базовыми версиями Python.

Я тогда сделал Sudo APT-получить установку питона-virtualenv, который я проверил свою версию : 1.11.4.

Этот пакет устарел (текущая версия 12.0.7).

Теперь у вас есть виртуальная среда, установленная против базы Python 2, потому что package requires Python 2.

На практике это означает, что если вам нужно обновить Python 2, вам необходимо убедиться, что python-virtualenv также обновлен для базовых версий обоих Pythons, которые поддерживаются вашей операционной системой. Это означает, что после apt-get update и apt-get upgrade, virtualenv будет обновлен.

Обычно это не имеет значения, поскольку это редкий случай, если python2 обновлен, а затем python-virtualenv не обновлен в соответствии с его зависимостью.

Однако это не рекомендуется, так как вы хотите управлять версиями критического программного обеспечения «вручную», чтобы избежать сюрпризов. Есть способы контролировать это на Ubuntu и других дебиан-подобных дистрибутивах на pinning versions; но даже если вы это сделаете, возможно, вы не получите последнюю версию библиотеки, которая может заставить вас позже до удалить версию, прилагаемую к вашей операционной системе, и переустановить ее из источника.

Я создал ~/virtualenvs/py2.7 и ~/virtualenvs/py3.4.

Внутри ~/virtualenvs, я virtualenv -p/USR/бен/python2 py2.7 и ~/virtualenvs, я virtualenv -p/USR/бен/python3 py3.4

Так как Я устанавливаю только библиотеки python2 для приложения python 2?

E.g.являются Джанго-adminfiles, sorl-миниатюры, psycopg2

для того, чтобы solr-thumbnail и psycopg2 быть установлены правильно, вам нужно построить их зависимости; так

sudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev 
sudo apt-get install libgraphicsmagick++-dev libboost-python1.55-dev 
sudo apt-get install libexpat1-dev libpython-dev libpython3-dev libssl-dev libpq-dev 

Чтобы установить библиотеки для приложения Python 2:

  1. Активизировать виртуальную среду; набрав source ~/virtualenvs/py2.7/bin/activate

  2. pip install _____ Тип (название библиотеки)


Для поддержки нескольких приложений на Python с различными основными версиями; ваша система должна иметь как основные версии Python, установленные (вы уже это сделали).

Затем вы устанавливаете virtualenv для каждой основной версии Python. Вы можете пропустить этот шаг, если ваши приложения полностью включены (то есть, они включают в себя время выполнения Python, но это редкий случай) или если у вас есть сервер с одной целью.

Вам не следует устанавливать ничего, кроме базовых библиотек Python, на глобальном питоне вашей системы. Этого следует избегать (как root, или используя sudo) до pip install вещей; потому что они будут установлены для всех пользователей Python и могут вызвать проблемы (в некоторых системах, таких как Fedora/RedHat - критические системные пакеты, такие как yum, основаны на базовой системе Python).

Следующий шаг - убедиться, что у вас есть подходящая среда для сборки. Это означает, что для систем, находящихся в Debian, можно установить build-essential и далее библиотеки поддержки для общих драйверов и модулей Python. Точные библиотеки, которые вам нужно установить, будут зависеть от приложений, которые вы планируете размещать, но как минимум вы должны убедиться, что можно установить PIL (или Pillow), а также библиотеки поддержки драйверов баз данных. Для этого вы можете использовать apt-get build-deb python-imaging psycopg2 python-mysqldb (для PostgreSQL, MySQL и PIL).

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

Для размещения приложения:

  1. Создать виртуальную среду с базовой версией Python требуется. Так virtualenv-2.7 или virtualenv-3 как обычная учетная запись пользователя без полномочий root.

  2. Установите необходимые пакеты в виртуальную среду.

  3. Откорректируйте скрипт начальной загрузки для вашего приложения, чтобы использовать правильный двоичный код Python. Обычно это делается из любого процесса, который вы используете для управления сервером приложений. Например, на моем сервере я использую supervisord.

Это все, что вам нужно. Все остальное будет зависеть от требований и настроек отдельного приложения (поэтому, если вам нужно обслуживать статические файлы, вам придется настроить это сопоставление и т. Д.)


После прочтения вашего shell script, кажется, вы пытаетесь построить сервер, который будет поддерживать как приложение, передний конец и базы данных.

Для поддержки такой системы; вам необходимо будет установить следующее:

  1. Сервер (ы) базы данных, который вы хотите поддержать. Поскольку это сервер с одной целью, вам также потребуется установить клиентов командной строки базы данных.

  2. Исходный код инструмента (git и т.д.)

  3. Глобальный менеджер процессов (например, supervisor или circus).

  4. Базовые версии Python, которые вы собираетесь поддерживать; и их заголовки развития (sudo apt-get install python-dev)

  5. setuptools, pip, а затем virtualenv. Эти инструменты должны быть , установленный из источника, а не ваш менеджер пакетов; для обеспечения установки последних версий. Вы должны установить их глобально (т. Е. Как root), чтобы они были доступны для всех пользователей.

  6. цепь инструмента для сборки (т.е. «Средство разработки» или build-essential)

  7. библиотека поддержки для любых расширений (но не сами расширения). Самый простой способ сделать это - использовать диспетчер пакетов для создания зависимостей, а не пакетов sudo apt-get build-dep python-imaging psycopg2 python-mysqldb.

Следующее, что вам нужно сделать, это решить, как вы будете запускать серверы приложений («код django»). Вы можете использовать uwsgi, gunicorn и т. Д., Так как они наиболее тестируются с помощью django.

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

Следующее, что вам нужно установить, - это прокси-сервер для ваших приложений. Вы можете установить любой прокси-сервер в соответствии с вашими потребностями (nginx является самым популярным); но, пожалуйста, установите из источника, а не в пакеты, поскольку они почти всегда устарели.

После того, как все это настроить, процесс размещения приложения Джанго является следующее:

  1. Создать отдельную учетную запись пользователя с нерегистрированной оболочкой.
  2. Создайте виртуальную среду в домашнем каталоге этого пользователя. Я рекомендую хранить некоторые стандарты здесь, например env для виртуальных сред.
  3. Загрузить/скопировать исходный код приложения.
  4. Создайте стандартный каталог, в котором вы будете хранить статические файлы. Например, я использую $HOME/www/static.
  5. Создайте запись в диспетчере процессов.
  6. Создайте запись в своем прокси для маршрутизации на передней панели.
  7. Перезагрузите свой прокси-сервер.
  8. Перезагрузите диспетчера процессов.

Вы можете автоматизировать/сценаризировать много из вышеперечисленного. Например, вы можете создать custom skeleton directory для создания базовых каталогов для вас при добавлении новых пользователей; и вы можете создавать собственные шаблоны для других областей с помощью таких инструментов, как cookiecutter.

+0

«Вам не следует устанавливать ничего, кроме базовых библиотек Python». Я использую root, и вместо этого я использую pip2 и pip3. Считает ли это, что избегать? –

+0

«как минимум, вы должны убедиться, что PIL (или Pillow) можно установить, и доступны библиотеки поддержки драйверов баз данных. Для этого вы можете apt-get build-deb python-imaging psycopg2 python-mysqldb (для PostgreSQL, MySQL и PIL). " Я использую pip2 install psycopg2, а для postgres и mysql я сделал это https://gist.github.com/simkimsia/41c55e0c08eda42e2cb3#file-install-sh-L77. Это нормально? –

+0

«Создайте виртуальную среду с базовой версией Python, поэтому virtualenv-2.7 или virtualenv-3 как обычная учетная запись пользователя без полномочий root». Можете ли вы уточнить точные командные строки? До сих пор я запускал 'pip2 install virtualenv', используя учетную запись пользователя root. Нужно ли это отменить? –

2

Понимание исполнения путь

Первый принцип, чтобы понять, что при установке пакетов на вашей операционной системе (виртуальной машины, что угодно) с sudo является то, что вы устанавливаете все эти пакеты в глобальном месте, что это каталог файлов, о котором ваша система знает через переменную окружения $PATH (PATH).

Эта $PATH переменная часто настройки по умолчанию в вашем .bashrc или ваш .bash_profile или ваш .profile всякий раз, когда создается новый Linux/Unix пользователь. Имеете ли вы какой-либо из этих файлов, зависит от того, что находится внутри /etc/skel в вашей системе. /etc/skel содержит «шаблон» этих файлов, который дублируется всякий раз, когда создается новый пользователь с домашним каталогом.

При вводе echo $PATH в командной строке, вы увидите список выполнения поиска пути, ограниченную :, например:

/usr/local/sbin:/usr/local/bin:/usr/bin

Это пример, который я буду использовать для целей настоящего обсуждения , Различные ОС дадут вам несколько разные значения по умолчанию $PATH, но простая идея заключается в том, что двоичные файлы ваших глобально установленных пакетов попадают в один из этих каталогов, и причина, по которой вы можете запускать эти двоичные файлы, состоит в том, что эти двоичные файлы (программы) теперь доступны в пути поиска выполнения (просто называется $PATH).

Хорошо, но что это значит для устных переводчиков python 2 и python 3, которые я установил?

Таким образом, в отношении вашего вопроса, то это означает, что, когда вы sudo apt-get или sudo aptitude установить python2 или Python3 бинарные файлы (питон переводчик), они являются доступными и для дифференциации, которые interpeter вы используете в любой момент, вы бы запустить python2.7 или python3.4, что соответственно вызывает /usr/bin/python2.7 или /usr/bin/python3.4

Вы всегда можете проверить это легко с помощью команды which Linux/Unix. which python3.4 вернет вам точный путь, где установлен ваш двоичный файл python3.4.

Аналогичным образом, когда вы вводите в командной строке тип pip2.7, вы просите свою систему выполнить программу pip2.7, которая была установлена ​​с вашим пакетом python2.7. И, естественно, which pip2.7 покажет вам, где был установлен бинарный файл pip2.7.

Все это возможно только потому, что эти двоичные файлы были установлены вами с помощью sudo apt-get и размещены в каталогах, перечисленных в $PATH. Если вы принудительно переместите один из этих двоичных файлов в другой каталог, не указанный в $PATH, вы поймете, что вы больше не можете запускать двоичный файл в командной строке, не набирая конкретный путь к двоичному.

Дополнительная питон конкретная информация

Питон интерпретатор имеет еще один атрибут вызова $PYTHONPATH. Это, как вы правильно поделите, - это переменная, содержащая список каталогов («путь поиска»), где интерпретатор python будет искать модули python для загрузки. Если вы хотите знать, где ваш интерпретатор Python в настоящее время ищет модули (собственные модули питона или 3-модули партии питона), запустите

python -c "import sys; print(sys.path)"

где python ваш конкретный интерпретатор Python. Если /usr/bin/python символически связан с /usr/bin/python2.7, то вы на самом деле звоните python2.7.

Когда будет происходить путь python? Это важно в вашем собственном .py исходном коде, когда вы запрашиваете import других модулей. Строка кода import в исходном коде .py - это то, где вы просите интерпретатора python идти вперед и искать модуль, который вы хотите импортировать. Как вы можете себе представить, если ваш sys.path (на python) пуст, вы не сможете импортировать сторонние модули.

За окровавленные детали

Теперь, когда у нас есть четкое понимание основных принципов, лежащих в $PATH и $PYTHONPATH, теперь мы можем понять, что virtualenv (и, кроме того, virtualenvwrapper полезно) делает для нас.

Когда мы создаем новый virtualenv, дающий ему каталог, мы говорим о том, что мы хотим символически ссылаться на конкретный интерпретатор python (через флаг -p python2.7 для команды virtualenv), например, для этого virtualenv.

Когда мы инициируем активацию созданного виртуального виртуального пространства, мы на самом деле вызываем сценарии оболочки, которые поставляются с virtualenv для динамического изменения $PATH. Попробуйте запустить echo $PATH после того, как источник активирован созданным вами виртуальным пользователем. Что ты видишь?

Это верно, вы будете видеть что-то вроде этого: -

/Users/calvin/.virtualenvs/myproject/bin:/usr/local/sbin:/usr/local/bin:/usr/bin

И если вы наберете which python, что вы получите?

/Users/calvin/.virtualenvs/myproject/bin/python

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

Если запустить

ls -la /Users/calvin/.virtualenvs/myproject/bin

что вы видите?

Ах! Символическая ссылка на конкретный глобальный интерпретатор python, который вы указали при создании этого virtualenv. Если вы не видите символическую ссылку, это означает, что весь ваш интерпретатор python был скопирован с установленного на глобальном уровне.

Так вот что делает наш инструмент virtualenv. Это позволяет нам изолировать конкретные проекты и выбирать, какой интерпретатор python использовать для конкретного проекта.

Как только у вас есть источник, активированный virtualenv, ваш пип также является пипом, который находится в вашем каталоге virtualenv. Этот пип - это путь к питону. При выдаче команды pip install, питон пакеты Теперь инсталлируется в ваш

/Users/calvin/.virtualenvs/myproject/lib/site-packages

питона каталог пакетов; и доступны ТОЛЬКО в ваш проект, когда вы активируете этот конкретный проект.

Что делать, если вы устанавливаете пакеты с sudo pip?

sudo pip вызывает инструмент pip, который поставляется с вашим глобально установленным интерпретатором python. Когда вы используете sudo pip, вы устанавливаете пакеты python в глобальное местоположение (которое не заключено в тюрьму внутри virtualenv).

Я не дал вам конкретных ответов на вопрос о том, как задать вопрос о том, как я могу сделать-два-проекты-использовать-два-разные-питон-интерпретаторы. Я объяснил принципы и теперь, когда вы знаете принципы, ясно, что вам нужно делать. Ура!

: D

0

вы должны попробовать следующие шаги, чтобы сделать вашу работу Джанго с питоном-2.7.

Как Ubuntu-14 уже поставляется с установленным Python-2.7. поэтому нет необходимости устанавливать python-2.7. Прежде всего установить питон Setuptools для питона-2.7:

https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.5.tar.gz 
tar -zxvf setuptools-12.0.5.tar.gz 
cd setuptools-12.0.5/ 
sudo python2.7 setup.py install 

после установки Setuptools установки пипа для питона-2,7

wget https://pypi.python.org/packages/source/p/pip/pip-6.0.8.tar.gz 
tar -zxvf pip-6.0.8.tar.gz 
cd pip-6.0.8/ 
sudu python2.7 setup.py install 

после установки пипа теперь мы должны пойти для установки виртуальной среды Python:

sudo pip2.7 install virtualenv 

затем в папку, в которой вы хотите создать новый virtualenv с помощью python 2.7 virtualenv-2."Название для нового virtualenv, например '/ вар/виртуальный/DjangoProject'" 7 кд/вар/виртуальный/

virtualenv-2.7 DjangoProject 

Примечание только что создали virtualenv названия "DjangoProject" Теперь время, чтобы активировать новый virtualenv

cd DjangoProject 
source bib/activate 

Теперь пришло время клонировать ваш проект здесь.

git clone "your git url" 

установить остальные приложения и django здесь. если вы создали просто установить на requirement.txt

cd "projectFolder" 
pip install -r requirement.txt 

после выполнения все этого вашего нового python2.7 Джанго с virtualenv готовы к использованию. просто запустить Джанго WSGI сервер для теста каждая вещь рабочая:

python manage.py runserver. 

Теперь вы можете использовать этот virtualenv и проект установки для веб-сервера.

Надеюсь, это поможет вам.

0

Вы должны использовать pyenvpyenv virtualenvwrapper). С помощью этих инструментов вы можете иметь несколько версий Python и переключаться между ними.

Вот как настроить одну среду с Python 3.4.2 и один с Python 2.7.8 (и каждой среды может иметь свои собственные пакеты Python)

# install pyenv 
git clone https://github.com/yyuu/pyenv.git ~/.pyenv 

# setup pyenv and load when shell is loaded 
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc 
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc 
echo 'eval "$(pyenv init -)"' >> ~/.bashrc 

# install pyenv virtualenvwrapper 
git clone https://github.com/yyuu/pyenv-virtualenvwrapper.git ~/.pyenv/plugins/pyenv-virtualenvwrapper 

# setup pyenv virtualenvwrapper and load when shell is loaded 
echo 'export PYENV_VIRTUALENVWRAPPER_PREFER_PYVENV="true"' >> ~/.bashrc 
echo "pyenv virtualenvwrapper" >> ~/.bashrc 

Теперь все настройки. Перезапустите оболочку.

# install python 2.7.8 
pyenv install 2.7.8 
pyenv rehash 

# install python 3.4.2 
pyenv install 3.4.2 
pyenv rehash 

# switch the global python version to 2.7.8 
pyenv global 2.7.8 

# create a virtual environment using python 2.7.8 
mkvirtualenv project278 

# -- now you can install you python 2 modules 

# leave the virtual environment 
deactivate 


# switch the global python to 3.4.2 
pyenv global 3.4.2 

# create a virtual environment using python 3.4.2 
mkvirtualenv project342 

# -- now you can install you python 2 modules 

# leave the virtual environment 
deactivate 

# switch the global python to the system python. 
pyenv global system 

# swith to environment project278 and check the python version 
workon project278 
python --version 

# swith to environment project342 and check the python version 
workon project342 
python --version 

Voilà! Теперь у вас есть две среды с разными версиями Python. Просто используйте команды workondeactivate) для переключения между ними.

Убедитесь, что вы прочитали документацию по используемым пакетам, чтобы вы поняли, что происходит!

Смежные вопросы