django - 如何在安装了python 3.4的情况下使用python 2.7在nginx和virtualenv上使Django 1.7在Ubuntu 14.04上正常工作?

标签 django ubuntu nginx virtualenv uwsgi

我是Django和Python安装的新手。中级的Ubuntu 14.04。

到目前为止,这些是我在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的使用感到困惑。

我想为Django 1.7的生产水平准备尽可能多的ubuntu 14.04服务器版本。

之所以安装多个Python环境是因为我可能正在运行需要3.4的其他Python应用。

我的Django文件来自bitbucket存储库,我已经git将它们克隆到/var/virtual/WebApps/DjangoProject

/var/virtual/WebApps/DjangoProject内部,我有manage.py以及其他文件和文件夹。

请告知我如何在这种情况下运行Django项目。

我目前正在我的virtualbox和vagrant上测试此设置。

编辑

至少会有2个Django应用程序。 1需要2.7 python。另一个需要3.4 python。

让我补充一点,这是一台将托管应用程序,前端和数据库的服务器。

编辑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
那么,如何为python 2应用安装仅python2库?

例如。是django-adminfilessorl-thumbnailpsycopg2
编辑5

改用virtualenv --system-site-packages -p /usr/bin/python2 py2.7

最佳答案

I have restarted with a fresh install of Ubuntu 14.04 and I started with Python 2.7.6 and Python 3.4.0.



好的,现在您的系统中有两个Python的基本版本。基本版本仅表示操作系统支持的版本。您已在全局范围内安装。

换句话说,您已经使用操作系统的软件包安装程序安装了它们,并且没有单独编译它们。

实际上,以上内容仅在Linux中很重要,因为在Windows中,如果不经过几个步骤就无法“本地”安装。所有Python安装程序都会在注册表中注册自己,从而使它们成为全局的基本Python版本。

I then did sudo apt-get install python-virtualenv which I checked its version: 1.11.4.



该软件包已过时(当前版本为 12.0.7 )。

现在,您已经针对python 2基本版本安装了虚拟环境,因为package requires Python 2

实际上,这意味着如果您需要升级Python 2,则必须确保针对操作系统支持的两个Python的基本版本也更新了python-virtualenv。这意味着,当您使用apt-get updateapt-get upgrade时,virtualenv将被升级。

通常,这无关紧要,因为如果python2升级了,然后又没有升级python-virtualenv以匹配其依赖项,则这种情况很少见。

但是,不建议这样做,因为您希望“手动”控制关键软件的版本,以避免任何意外。 pinning versions有一些方法可以在Ubuntu和其他类似debian的发行版上进行控制;但是即使这样做,您也可能无法获得该库的最新版本,这可能会迫使您稍后卸载操作系统随附的版本,然后从源代码中重新安装它。

I have created ~/virtualenvs/py2.7 and ~/virtualenvs/py3.4.

Inside ~/virtualenvs, I did virtualenv -p /usr/bin/python2 py2.7 and ~/virtualenvs, I did virtualenv -p /usr/bin/python3 py3.4

So how do I install python2 only libraries for the python 2 app?

E.g. are django-adminfiles, sorl-thumbnail, psycopg2



为了正确安装solr-thumbnailpsycopg2,您需要构建它们之间的依赖关系。所以
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应用安装库:
  • 激活虚拟环境;通过输入source ~/virtualenvs/py2.7/bin/activate
  • 输入pip install _____(库名)


  • 支持具有不同主要版本的多个Python应用程序;您的系统应同时安装两个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应用程序。然后,您可以选择添加其他实用程序,但我会尽量避免过多地假设应用程序将需要什么。

    托管应用程序:
  • 使用所需的基本版本的Python创建虚拟环境。因此,virtualenv-2.7或virtualenv-3作为普通的非root用户帐户。
  • 将所需的软件包安装到虚拟环境中。
  • 调整应用程序的引导脚本,以使用正确的Python二进制文件。通常,这是通过用于管理应用程序服务器的任何过程完成的。例如,在我的服务器上,我使用supervisord

  • 那就是你要做的。其他所有内容都取决于单个应用程序的要求和设置(因此,如果需要提供静态文件,则必须配置该映射等)。

    阅读完shell script之后,您似乎正在尝试构建一台同时支持应用程序,前端和数据库的服务器。

    为了支持这样的系统;您将需要安装以下内容:
  • 您要支持的数据库服务器。由于这是一台单一用途的服务器,因此您还需要安装数据库命令行客户端。
  • 源代码工具(git等)
  • 全局流程管理器(例如 supervisor circus )。
  • 您打算支持的基本Python版本;及其开发 header (sudo apt-get install python-dev)
  • setuptools pip ,然后是 virtualenv 。这些工具应从源安装,而不是从软件包管理器安装。以确保安装了最新版本。您应该全局安装这些(即,以root用户身份),以便所有用户都可以使用它们。
  • 构建工具链(即“开发工具”或build-essential)
  • 任何扩展的支持库(但扩展本身不支持)。最简单的方法是使用包管理器而不是sudo apt-get build-dep python-imaging psycopg2 python-mysqldb来构建依赖关系。

  • 接下来需要做的是确定如何运行应用程序服务器(“django代码”)。您可以使用uwsgigunicorn等,因为这些是使用django测试最多的。

    您需要能够支持这些运行时的多个版本,而不是在整个系统中全局安装它们。只需构建其依赖项,然后在每个应用程序各自的隔离环境中安装所需的特定版本。

    接下来需要安装的是应用程序的前端代理。您可以安装任何适合您需要的代理(nginx是最受欢迎的代理);但请从源
    进行安装,而不要从软件包中安装,因为它们几乎总是过时的。

    设置完所有这些之后,托管django应用程序的过程如下:
  • 使用非登录 shell 程序创建一个单独的用户帐户。
  • 在此用户的主目录中创建虚拟环境。我建议在此保留一些标准,例如虚拟环境的env
  • 下载/复制您的应用程序的源代码。
  • 创建一个标准目录,您将在其中存储静态文件。例如,我使用$HOME/www/static
  • 在流程管理器中创建一个条目。
  • 在代理中为前端路由创建一个条目。
  • 重新加载代理服务器。
  • 重新加载您的流程管理器。

  • 您可以自动执行/编写许多上述内容。例如,当添加新用户时,您可以创建custom skeleton directory来为您创建基本目录。并且您可以使用 cookiecutter 之类的工具为其他区域创建自定义模板。

    关于django - 如何在安装了python 3.4的情况下使用python 2.7在nginx和virtualenv上使Django 1.7在Ubuntu 14.04上正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28271119/

    相关文章:

    amazon-web-services - 无法在 Ubuntu EC2 上挂载 EBS 卷

    ubuntu - 手动编辑简单构建过程所需的 debianrules 文件?

    c++ - boost::process::env 在 ubuntu 19.04 上损坏了?

    python - 如何使用 EmailMessage (Django) 在消息中插入新行

    python - 替换 Django 模板中的字符

    reactjs - Cookie 未存储在浏览器中

    ruby-on-rails - 如何让 systemd 使用 Puma 重启 Rails App

    html - nginx 自定义错误页面 css 不适用

    Node.js + Nginx - 现在怎么办?

    Django 验证 ImageField 尺寸等