1 用PasteScript创建项目
1.1 安装PasteScript
安装命令:
pip install PasteScript
查看可用的模板
[root@localhost test_project]# paster create --list-templates
Available templates:
basic_package: A basic setuptools-enabled package
paste_deploy: A web application deployed through paste.deploy
1.2 创建项目
paster create -t basic_package myproject
回答一系列问题后,项目生成
1.3 查看生成的项目目录结构
[root@localhost test_project]# tree myproject
myproject
|-- myproject
| `-- __init__.py
|-- myproject.egg-info
| |-- dependency_links.txt
| |-- entry_points.txt
| |-- not-zip-safe
| |-- PKG-INFO
| |-- SOURCES.txt
| `-- top_level.txt
|-- setup.cfg
`-- setup.py
2 修改setup.py,采用pbr部署
2.1 将setup.py中内容直接替换为如下内容
import setuptools
setuptools.setup(
setup_requires=['pbr'],
pbr=True)
2.2 修改setup.cfg内容为如下内容
[metadata]
name = myproject
version = 1.0
summary = myproject
description-file =
README.rst
author = me
author-email =
classifier =
Intended Audience :: Developers
Programming Language :: Python :: 2.7
[global]
setup-hooks =
pbr.hooks.setup_hook
[files]
packages =
myproject
data_files =
/etc/myproject = etc/myproject/*
/var/www/myproject = etc/apache2/app.wsgi
/etc/httpd/conf.d = etc/apache2/myproject.conf
[entry_points]
wsgi_scripts =
myproject-api = myproject.api.app:build_wsgi_app
oslo.config.opts =
myproject = myproject.opts:list_opts
分析:
一 pbr和setup.cfg
1) pbr是setuptools的插件,所以你必须使用setuptools,然后调用setuptools.setup()函数
2) pbr只需要最小化的setup.py 文件,跟普通的使用setuptools的项目相比。这是因为设置都在setup.cfg里面
3) setuptools的setup函数来进行设置时,如果与位于setup.cfg中的信息产生冲突,则setup.cfg则优先。
4) setup.cfg文档。这个文档像ini 文档。它基于项目distutils2的setup.cfg文件设置
5) setup.cfg文件中有几个段落:
metadata
files
entry_points
pbr
二 files段落定义了包中的文件位置,有三个基本的设置键:packages,namespace_packages,以及data_files.
1) packages: 指定需要安装的包的列表,若packages没有指定,默认为metadata段落中的name的值
2) data_files: 列出了需要被安装的文件。格式是缩进后跟上键值对
例如aodh的setup.cfg中配置
[files]
packages =
aodh
data_files =
etc/aodh = etc/aodh/*
上述例子表明: etc/aodh/*中的文件最终会被拷贝待/etc/aodh文件夹中
三 entry_points
作用:定义当前项目做为第三方python的库可以被其他python程序调用的lib进入点
1) console_scripts控制脚本
格式:
console_scripts =
脚本名称 = 模块:可导入对象
例子:
console_scripts =
aodh-evaluator = aodh.cmd.alarm:evaluator
解释:
这里会产生一个aodh-evaluator的脚本,执行aodh.cmd.alarm中的evaluator
函数。
2) 插件
格式:
命名空间 =
插件名称 = 模块:可导入对象
例子:
ceilometer.compute.virt =
libvirt = ceilometer.compute.virt.libvirt.inspector:LibvirtInspector
pbr参考
https://www.cnblogs.com/yasmi/p/5183423.html
https://docs.openstack.org/pbr/latest/
https://docs.openstack.org/pbr/latest/user/using.html
3 添加requirements.txt文件
该文件和setup.py在同一个目录
添加内容如下:
pbr<2.0,>=0.11
pecan
WSME
解释:
添加requirements.txt是因为给项目添加所依赖的第三方库,
使得项目在安装过程中会安装requirements.txt中的库,从而
确保项目运行正常。
4 添加paste部署所需要的内容
具体在myproject目录下新建一个目录api
4.1 api目录下新增一个文件: __init__.py
里面不要填写任何内容
4.2 api目录下新增一个文件: api-paste.ini
向该文件中写入如下内容:
[composite:main]
use = egg:Paste#urlmap
/ = api
[app:api]
paste.app_factory = myproject.api.app:app_factory
4.3 api目录下新增一个文件: app.py
在该文件中写入如下内容:
#!/usr/bin/env pytho