文档章节

项目开发环境搭建

豆仔
 豆仔
发布于 2014/01/13 12:18
字数 2080
阅读 277
收藏 7

BMC系统采用Python语言开发,Python语言具有跨平台性,能够在各种操作系统中使用,包括Linux、Mac OS和Windwos。在Python网站的主下载页面中可以找到由Python核心开发团队提供的各种版本。

BMC系统使用的是Python 3.3分支,数据库采用MongoDB。由于Python 3分支与Python 2分支的不兼容性,产生了许多问题,配置开发环境的过程中要注意的问题比较多,如果没有正确搭建,则无法正常运行本系统。

虽然Python语言是可移植的,BMC系统最初也是在Windows操作系统下开发,但遇到较多困难,因此并不推荐采用Windows开发,原因有两点:

  1. 较多依赖的包需要使用C语言的编译环境,在Ubuntu下相关环境十分容易安装,在Windows下则比较困难,通常会出现error: Setup script exited with error: Unable to find vcvarsall.bat错误,在StackOverflow上搜索vcvarsall.bat截止2013/12/13有496个相关问题,主要有两种解决方法:一是安装C编译环境,并进行相关配置,相对复杂;二是使用非官方提供的编译好的版本[ Unofficial Windows Binaries for Python Extension Packages:http://www.lfd.uci.edu/~gohlke/pythonlibs/]。第二种方法的缺点是使用的第三方库的版本不一定能得到及时更新,也可能没有提供Python 3的编译版本。

  2. Tornado官方并不支持使用Windows,所提供异步功能需要依赖*nix系统中的相关组件。

本节以Ubuntu 13.10 saucy 64位操作系统为例,介绍开发环境的搭建。

基本环境安装

Ubuntu 13.10同时提供了Python 2与Python 3的解释器,无需安装。由于Python 2与Python 3分支不兼容,因此安装相应第三方库时,要特别注意是否为Python 3分支版本。由Ubuntu提供的Python 3分支版本的第三方库的会以python3为前缀,如python3-pip。

Python拥有大量的第三方库,存储在Python官方网站的集中式仓库Python Package Index(PyPI),pip是用于安装与管理Python第三方库的工具,在终端下使用如下命令安装:

$ sudo apt-get install python3-pip

通常Python的第三方库会存在许多版本,假设操作系统中的一个应用程序需要版本4的Beautiful Soup,而另一个应用程序需要版本3的Beautiful Soup,不可能在全局库中同时安装这两个版本的包,如果将所有的包都安装到Python的默认包安装目录,比如/usr/lib/python3/dist-packages中,那么就可能在无意中升级了一个不应该升级的包,导致早期的应用程序无法运行。更一般的情况,如果已经有一个可以正常运行的应用程序,那么任何关于库与库的版本的变化都可能导致应用程序的崩溃。另一种情况,对于共享的主机,可能会没有权限将包安装到全局的dist-packages目录中。virtualenv就是用来处理这些情况的工具。

virtualenv是一个创建独立Python虚拟环境的工具,各个环境中拥有自己的python解释器和各自的第三方库安装目录,互不影响,解决了基本的依赖与版本问题,以及间接权限。对于安装在全局环境中的库,在创建虚拟环境时可以通过参数设置是否使用。

虽然virtualenv可以有效的隔离环境,但是使用起来比较不方便,任何操作都需要进入相应的目录,因此出现了对其进行扩展的virtualenvwrapper。virtualenvwrapper是virtualenv工具的一组扩展,提供了切换开发环境的快捷命令。在终端中使用如下命令安装virtualenvwrapper:

$ sudo pip3 install virtualenvwrapper

出现:Successfully installed virtualenvwrapper virtualenv virtualenv-clone stevedore表示安装成功。可以看出,安装virtualenvwrapper的同时,也自动为我们安装了virtualenv。 在HOME目录中新建文件夹Devel用于放置项目文件。

在~/.bashrc文件末尾添加配置:

<!-- lang: shell -->
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
if [[ -r /usr/local/bin/virtualenvwrapper.sh ]]; then
    source /usr/local/bin/virtualenvwrapper.sh
else
    echo "WARNING: Can't find virtualenvwrapper.sh"
fi

保存后在终端中运行“$ source ~/.bashrc”或重启终端,即可使配置生效。

创建项目使用命令“mkproject bmc”,该命令会在上面设置的“$PROJECT_HOME”中创建bmc目录,里面放置项目的源码,还会同时在“$WORKON_HOME”目录中创建bmc目录相当于创建了虚拟环境,用于存放相关的库文件;可单独使用“mkvirtualenv bmc_new_libs”创建虚拟环境,并与项目关联,这里直接使用默认创建的即可;激活环境使用命令“workon bmc”;退出环境使用命令“deactivate”;删除环境使用命令“rmvirtualenv bmc”(需谨慎使用);每次启动终端时,执行“workon bmc”即可切换到bmc这个虚拟环境(在virtualenv中需要切换至少3次目录才能达到同样的效果),该命令会自动转入项目目录并使用虚拟环境,终端提示符中多了“(bmc)”表示已激活的虚拟环境名称。如下:

zoey@zoey-VirtualBox:~$ workon bmc
(bmc)zoey@zoey-VirtualBox:~/Devel/bmc$

在安装BMC系统所依赖的Python包之前,需要在终端中安装如下依赖:

$ sudo apt-get install libcurl4-gnutls-dev libxml2 libxml2-dev libxslt1.1 libxslt1-dev

然后在虚拟环境中运行:

(bmc)zoey@zoey-VirtualBox:~/Devel/bmc$ pip install -r requirements.txt

出现如下提示表示安装成功:

Successfully installed Markdown Pillow Whoosh beautifulsoup4 chardet2 cssselect html5lib lxml pycurl pymongo tornado six

可能出现未能正常安装包的情况,需要独立安装,例如,pycurl。对于pycurl,在本应用开发时,使用pip安装的版本并不能正常使用,存在Bug,因此使用了特殊的安装方式。在终端中使用“sudo apt-get install python3-pycurl python3-pycurl-dbg”安装Ubuntu预编译的Python3版本的pycurl,然后到“/usr/lib/python3/dist-packages”文件夹中拷贝pycurl相关的库文件到“~/.virtualenvs/bmc/lib/python3.3/site-packages”文件夹中,包括curl文件夹、pycurl.cpython-33dm-x86_64-linux-gnu.so、pycurl.cpython-33m-x86_64-linux-gnu.so、pycurl-7.19.0.egg-info。

BMC系统开发时Tornado的最新稳定版本为3.1.1,pycurl与Tornado 3配合使用在Python 3中还存在Bug,简单修改Tornado的源代码即可正常使用,如图4.4。

图4.4 修改Tornado源代码,httputil.py163行,curl_httpclient.py461行

至此,Python相关环境配置完成,可从GitHub上克隆项目至bmc目录中(git clone,或直接下载项目包),接着在安装MongoDB数据库后,即可使用如下命令启动tornado服务: (bmc)zoey@zoey-VirtualBox:~/Devel/bmc$ python run.py 在浏览器中打开http://localhost:8888即可使用系统的Web客户端。

MongoDB安装

10gen为比较流行的平台维护并发布自己的包,在mongodb.org网站上可以找到安装这些特殊包的详细信息。在Ubuntu上安装MongoDB十分简单,在终端中使用如下四条命令即可:

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
$ echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update
$ sudo apt-get install mongodb-10gen

接着为MongoDB的运行目录添加权限:

$ sudo chown mongodb /var/lib/mongodb
$ sudo chown mongodb /var/log/mongodb

配置信息保存在/etc/mongodb.conf,可根据需求进行修改。常用命令如下:

  • 启动服务:sudo service mongodb start
  • 停止服务:sudo service mongodb stop
  • 重启服务:sudo service mongodb restart

通常系统启动时会自己启动MongoDB服务。对于喜欢使用GUI软件查看数据库的开发人员,推荐安装使用Robomongo进行数据库管理,它提供了MongoDB的JS Shell可直接输入命令,跨平台,提供命令自动补全,并采用多标签窗口。如图4.5为在Robomongo中查看BMC系统的数据库,图4.6为BMC系统中一条书签文档,与SQL数据库不同的是,标签tags可以以数组的形式保存,无需单独创建一个数据库表来保存标签。

图4.5 在Robomongo下查看本系统数据库

图4.6 在Robomongo下查看一条书签文档

© 著作权归作者所有

共有 人打赏支持
豆仔
粉丝 54
博文 54
码字总数 24065
作品 0
南京
程序员
Spring Cloud搭建开发环境

1 开发环境搭建 工欲善其事,必先利其器。在讲述本书的技术内容前,先将开发环境搭建好,本书所涉及基础环境将在本章准备,包括Eclipse、Maven等。 笔者建议读者在查阅本书过程中,使用与本书...

Jokey2017
2017/11/13
0
0
使用MyEclipse搭建java Web项目开发环境

首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的Java Web项目开发环境的搭建。 1、安装工具 第一步,下载并安装JDK,到官网...

bengozhong
2016/11/30
25
0
求助php本地开发环境的搭建

可能是被python灌坏了吧,在搭建php开发环境的时候,总是希望能让服务器在代码目录下直接跑起来,而不用复制到服务器的目录。 修改nginx和php等的配置,是可以实现在代码目录跑起来,但因为修...

乌龟壳
2013/06/23
853
12
搭建我的网站的mobile版的开发环境

image.png 之前我已经搭建过一个开发移动web的react开发环境,在那时我就已经想把我的极客教程弄一个手机上体验好的web app,无奈公司业务太多,整天忙着赶项目,下班回去的时候疲惫不堪,已...

极客教程
2017/10/09
0
0
Windows系统下Eclipse上搭建Python开发环境

Windows系统下Eclipse上搭建Python开发环境 在Eclipse上安装和搭建Python开发环境需要以下五步完成: (第一步)下载最新的Eclipse安装包。 我是基于Python版本python-3.6.4。python-3.6.4要...

zhangphil
01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

控件WebView显示网页

一、代码编写 (一)方法一:通过打开app直接打开指定网站 1.打开Android Stutio,新建一个工程,名为Sdca。注意,名称开头必须为大写。 2.添加WebView控件 打开app esactivity_main.xml添加...

lanyu96
28分钟前
2
0
WinRAR 去除弹窗广告

想要去除它,需要用到另外一个工具resource hacker,百度一下,下载它,工具很小,安装也简单。安装过后,找到winrar安装目录下的WinRAR.exe文件,右击选择 open useing resource hacker打开...

YunOu
41分钟前
2
0
Bash工作管理详解

Bash工作管理 Bash的工作是对具体任务的一个抽象表述,更确切的说是对管道的应用上的表述。Bash中的工作在形式上表现为一组相关进程或单个进程。工作进程组分为前台和后台,前台进程会对键盘...

小陶小陶
45分钟前
2
0
Qt那些事0.0.1

LIBS += -L$$PWD/lib/ -lStv1QMAKE_POST_LINK += $$QMAKE_COPY $$replace(PWD,"/","\\")\lib\Stv1.dll $$replace(OUT_PWD,"/","\\")\debug\Stv1.dll pro文件里,写起来按理说应该是轻松地......

Ev4n
54分钟前
2
0
如何正确的使用动态VPS(Linux)自动更换IP

背景 现在越来越多的人开始玩网赚项目,蚂蚁再小也是肉,薅羊毛的羊毛党越来越多,一些网赚项目也越来越受欢迎,但是一般的网赚项目都是要求真实用户的,所以要想获得大量的真实ip,一种动态...

bengozhong
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部