須要深刻理解Pyramid(Pylons也同樣)項目結構,至少須要瞭解Paste項目的一些必要信息,也要對setuptools有必定了解,不然不少東西都會知其然而不知其因此然。python
咱們先簡單看看一個基本Pyramid項目中各個文件的做用與基本內容。服務器
1、development.ini配置文件結構 development.ini是一個PasteDeploy配置文件,主要爲使用paster serve運行的應用提供配置參數。咱們安裝development.ini中配置段落逐項看一下其具體的做用。app
[server:main] use = egg:Paste#http host = 0.0.0.0 port = 6543函數
這一段定義了WSGI服務器的一些基本信息。 use = egg:Paste#http代表使用Paste中的http服務器來爲應用提供服務。 host = 0.0.0.0表示任何IP地址均可以訪問這個應用 port = 6543表示服務端口是6543 在[server:main]裏面還能夠配置http服務器線程池等各類參數,具體能夠查看PasteDeplay。工具
[pipeline:main] pipeline = egg:WebError#evalerror MyProject 這也是PasteDeplay中定義的格式。這一段定義了paster serve命令運行的應用(這裏是一個管道)。單元測試
[app:MyProject] use = egg:MyProject reload_templates = true debug_authorization = false debug_notfound = false debug_routematch = false debug_templates = true default_locale_name = en測試
這一段就是本應用的配置參數。注意,這裏的名字MyProject與pineline中定義的名字一致。 在本段配置參數中,use = egg:MyProject 這裏省略了#main(即use = egg:MyProject#main)。這個定義指明瞭本應用的入口程序,這裏是MyProject這個egg包中的main函數(能夠查看myproject目錄下的__init__.py文件,裏面就定義了這個main函數)。 另外還有reload_templates、debug_templates也須要注意一下,這主要是在開發中調試方便使用的,在應用部署時記得設成false。網站
development.ini中還有一大段python 標準log信息的配置,都懂得,不解釋。ui
2、production.ini Pyramid還加了一個產品部署時用的配置文件production.ini,基本等同與development.ini。主要區別是去掉了WebError交互調試界面,以及一些調試開關。線程
3、MANIFEST.in文件 這是distutils這個打包工具的配置文件(setuptools是distutils的一個擴展)。主要在裏面列出了一些須要打進egg包的非python文件。
4、setup.py 這是運行setuptools所須要的啓動文件。咱們在單元測試、打包、分發等工做時常常須要使用它。這基本已是python世界裏面的事實標準了。 在這個文件裏面,咱們須要注意的配置項以下: name=’MyProject’ 項目名,包名 version=’0.0’ 版本,這個常常須要改動 packages=find_packages() 打包時須要打到包中的內容,默認全部 zip_safe=False 指定該包是否可以不解壓就能被引用 install_requires=requires, tests_require=requires 指定了本項目的依賴關係,須要什麼包才能安裝、測試 test_suite="myproject" 指定了單元測試搜索路徑 entry_points 定義了本項目的入口。
定義好咱們就可使用 python setup.py sdist 這樣的命令將整個項目打包。不一樣的打包命令及其區別參見setuptools
5、setup.cfg 這個文件是setuptools的參數配置文件,主要配置了單元測試、國際化等方面的一些配置。 [nosetests] match = ^test nocapture = 1 cover-package = myproject with-coverage = 1 cover-erase = 1 這一段是單元測試的配置信息(不過貌似跟python setup.py test命令無關,目前還不清楚在什麼地方用到。 其餘的信息都是國際化支持的配置,這跟標準python中定義的基本相同。
本文提到的示例材料均源於Pyramid官方網站