在《Django 最佳实践与部署》一文中我曾提到过用 virtualenv 创建虚拟环境的好处。今天将结合 virtualenvwrapper—virtualenv 的终极伴侣,来具体谈一谈如何利用虚拟环境提高开发效率。
为什么要使用 virtualenv 和 virtualenvwrapper 作为一个完美主义者,不喜欢看到系统site-packages放着各种各样 Python 包。很多包只是因为某个项目需要,而根本没有必要放在全局。我喜欢 virtualenv 这种相互独立环境的概念,就好像有很多房间,每个房间可以有不同装饰,拥有自己个性。
virtualenv 安装 $ pip install virtualenv 创建环境 $ virtualenv ENV # 创建名为‘ENV‘的虚拟环境 $ New python executable in ENV/bin/python $ Installing setuptools, pip...done. 这样就成功创建好一个 python 的虚拟环境,实际上他为你建立了三个目录:
bin include lib 这里面包含一个 Python 环境(默认为系统 Python 的版本),一些基本工具(如 easy_install 和 pip)以及一些 symbolic link。而以后的 package 都会装到lib/pythonX.X/site-packages里面。
激活环境 使用虚拟环境之前必须激活,不然 package 还是会装到系统的site-packages里面。
$ source bin/activate 激活成功后,prompt 左边会出现一个括号,里面对应就虚拟环境的名字。这个时候就代表激活成功了,而此时用 pip 安装任何包都会装到虚拟环境的site-packages,对其他项目和系统 Python 环境都完全不影响。
题头 头图是我一个Django项目–Santa的代码片段,放出来给大家欣赏一下。
第一篇很技术的文章。Mrxu同学强烈要求我出个教程,基于Django的部署实在有太多坑,为后人铺条路。以下文字是我摸爬滚打无数小时换来的一个可行方案。希望对大家有所帮助。
Django最佳实践 项目结构 相信很多朋友在使用Django的时候都会遇到这个问题,项目到底如何组织?只有一个app的时候不要紧,有两个、三个甚至多个app的时候,模板(templates)要放在那里,静态文件(static files)放在哪里?由于Django社区(不像Rails)一直没有统一说法,所以此处说的只不过是仁者见仁,智者见智。希望Django早日出台官方的最佳实践。这里仅给大家一个参考。
下面我用一个myproject项目为大家阐述。这个项目由两个app组成:
每个app有自己的static目录 每个app有自己的templates目录 根目录下与项目同名的文件夹(比如这里的myproject)为项目设置,包含settings.py 根目录下有requirements.txt 为什么要这么做?这个在后面生产境部署的时候优势就会显现出来。
$ django-admin.py startproject myproject $ cd myproject $ python manage.py startapp myapp1 $ python manage.py startapp myapp2 $ touch requirements.txt # 新建requirement.txt $ mkdir myapp1/{static,templates} # 新建两个空文件夹 $ mkdir myapp2/{static,templates} $ tree . # 非常有用的一个命令, 图形化显示文件目录结构 . ├── manage.py ├── myapp1 │ ├── __init__.py │ ├── admin.py │ ├── models.py │ ├── static │ ├── templates │ ├── tests.