django + pip + virtualenv + postgres

April 22, 2014

安装 python,pip 和 easy_install

虽然 OS X 已经自带有多个版本的 python,不过还是推荐使用 homebrew 安装一个,因为 homebrew 还会自动帮我们安装 pip 和 easy_install 这两个包管理工具,更详细的关于 python 包管理工具资料请戳这里

brew install python --universal --framework

然后我们需要检查是否有 /usr/local/share/python 这个文件夹,如果不存在的话需要建立一个软链接,例如:

ln -s /usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/bin/ /usr/local/share/python

上面的 2.7 是当前 python 的版本号,按需替换即可。


安装 virtualenv 和 virtualenvwrapper

virtualenv 官网 是这样描述自己的:

virtualenv要解决的根本问题是库的版本和依赖,以及权限问题。假设你有一个程序,需要LibFoo的版本1,而另一个程序需要版本2,如何同时使用两个应用程序呢?如果将所有的库都安装在 /usr/lib/python2.7/site-packages(或者你的系统的标准包安装路径),非常容易出现将不该升级的库升级的问题。

另外,在一台共享的机器上,如果没有全局的 site-packages 目录的权限(例如一个共享的主机),如何安装Python库呢?

在这些情况下,就是该用到virtualenv的地方。它能够创建一个自己的安装目录,形成一个独立的环境,不会影响其他的virtualenv环境,甚至可以不受全局的site-packages当中安装的包的影响。

通过为每个项目创建虚拟环境,在每个虚拟环境中安装需要的第三方包版本,那么不同的项目就可以独立的使用一个 django 环境。virtualenvwrapper 则为 virtualenv 提供了一些便利的命令行上的封装。

首先在我们的 .bashrc 或( .zshrc )加上:

# Before other PATHs...
PATH=${PATH}:/usr/local/share/python

# Python
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2.7
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
if [[ -r /usr/local/share/python/virtualenvwrapper.sh ]]; then
    source /usr/local/share/python/virtualenvwrapper.sh
else
    echo "WARNING: Can't find virtualenvwrapper.sh"
fi

#

然后安装:

$ pip install virtualenv
$ pip install virtualenvwrapper

virtualenvwrapper 的用法当然还是看文档最靠谱啦。


安装 django

主角来了,首先cd到项目创建目录下,然后用 virtualenv 为我们的项目创建一个虚拟环境:

mkvirtualenv env1

接着就是安装 django:

pip install django

Finished,这就完成啦,实在是太简单了 :]


带上 postgres

最后,因为公司维护的要求,顺便就上 postgres了 (PostgreSQL 与 MySQL 相比,优势何在?) ,为了 django 能和 postgres 连接,先装psycopg2:

pip install psycopg2

然后就修改应用中的settings.py配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'test',
        'USER': 'user',                  # Not used with sqlite3.
        'PASSWORD': 'pwd',               # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '5432',                  # Set to empty string for default. Not used with sqlite3.
    }

最后同步一下项目的数据库:

python manage.py syncdb

Comments

comments powered by Disqus