02:Pyramid应用程序的python包¶
大多数现代的python开发都是使用python包完成的,这是python非常有用的一种方法。在这一步中,我们将“hello world”作为最小的python包重做到最小的python项目中。
背景¶
Python开发人员可以将模块和文件的集合组织到一个名为 package . 如果目录打开 sys.path
还有一个特殊的文件 __init__.py
,它被视为一个python包。
软件包可以打包,可用于安装,并通过面向 setup.py
文件。对于本教程,您只需了解以下内容:
我们将为每个教程步骤提供一个目录作为 项目 .
此项目将包含
setup.py
它将项目机器的特性注入到目录中。在这个项目中,我们将
tutorial
进入python的子目录 包 使用一个__init__.py
python模块文件。我们将运行
pip install -e .
以开发模式安装我们的项目。
综上所述:
您将在Python中进行开发 包 .
这个包是 项目 .
目标¶
使用
__init__.py
.通过创建一个
setup.py
.安装我们的
tutorial
项目处于开发模式。
步骤¶
为本教程步骤创建一个区域:
cd ..; mkdir package; cd package
在
package/setup.py
,输入以下内容:from setuptools import setup # List of dependencies installed via `pip install -e .` # by virtue of the Setuptools `install_requires` value below. requires = [ 'pyramid', 'waitress', ] setup( name='tutorial', install_requires=requires, )
为开发安装新项目,然后为实际代码创建一个目录:
$VENV/bin/pip install -e . mkdir tutorial
将以下内容输入到
package/tutorial/__init__.py
:# package
将以下内容输入到
package/tutorial/app.py
:from waitress import serve from pyramid.config import Configurator from pyramid.response import Response def hello_world(request): print('Incoming request') return Response('<body><h1>Hello World!</h1></body>') if __name__ == '__main__': with Configurator() as config: config.add_route('hello', '/') config.add_view(hello_world, route_name='hello') app = config.make_wsgi_app() serve(app, host='0.0.0.0', port=6543)
运行wsgi应用程序时使用:
$VENV/bin/python tutorial/app.py
在浏览器中打开http://localhost:6543/。
分析¶
python包为我们提供了一个有组织的项目开发单元。python项目,通过 setup.py
,在安装包时为我们提供特殊功能(在这种情况下,在本地开发模式下,也称作本地可编辑模式,如所示 -e .
)
在这一步中,我们有一个名为 tutorial
. 我们在教程的每个步骤中使用相同的名称,以避免不必要的重新输入。
以上 tutorial
目录我们有处理这个项目打包的文件。目前,我们只需要一根骨头 setup.py
.
关于我们的应用程序,其他一切都是一样的。我们只制作了一个python包, setup.py
并以开发模式安装。
注意我们运行应用程序的方式 (python tutorial/app.py
)有点古怪。我们永远不会这样做,除非我们正在写一个教程,试图捕捉这些东西如何一步一步地工作。通常,将包内的Python模块作为脚本直接运行是一个坏主意。