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 项目处于开发模式。

步骤

  1. 为本教程步骤创建一个区域:

    cd ..; mkdir package; cd package
    
  2. 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,
    )
    
  3. 为开发安装新项目,然后为实际代码创建一个目录:

    $VENV/bin/pip install -e .
    mkdir tutorial
    
  4. 将以下内容输入到 package/tutorial/__init__.py

    # package
    
  5. 将以下内容输入到 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)
    
  6. 运行wsgi应用程序时使用:

    $VENV/bin/python tutorial/app.py
    
  7. 在浏览器中打开http://localhost:6543/。

分析

python包为我们提供了一个有组织的项目开发单元。python项目,通过 setup.py ,在安装包时为我们提供特殊功能(在这种情况下,在本地开发模式下,也称作本地可编辑模式,如所示 -e .

在这一步中,我们有一个名为 tutorial . 我们在教程的每个步骤中使用相同的名称,以避免不必要的重新输入。

以上 tutorial 目录我们有处理这个项目打包的文件。目前,我们只需要一根骨头 setup.py .

关于我们的应用程序,其他一切都是一样的。我们只制作了一个python包, setup.py 并以开发模式安装。

注意我们运行应用程序的方式 (python tutorial/app.py )有点古怪。我们永远不会这样做,除非我们正在写一个教程,试图捕捉这些东西如何一步一步地工作。通常,将包内的Python模块作为脚本直接运行是一个坏主意。