Python 应用程序的目录结构

查看原文

Python 语言灵活,所以目录结构也可以很多样,不像别的应用程序一般就推荐一套写法。但是一般大家还是遵循几套固定的写法,毕竟程序类型还是有限的那么几种:命令行工具,一次性脚本,Web 应用,package。

  • CLI - 一次性脚本
helloworld/

├── .gitignore
├── helloworld.py
├── LICENSE
├── README.md
├── requirements.txt
├── setup.py
└── tests.py
  • CLI - 一个 package
helloworld/

├── helloworld/
│   ├── __init__.py
│   ├── helloworld.py
│   └── helpers.py

├── tests/
│   ├── helloworld_tests.py
│   └── helpers_tests.py

├── .gitignore
├── LICENSE
├── README.md
├── requirements.txt
└── setup.py
  • CLI - Package 变得很复杂后
helloworld/

├── bin/

├── docs/
│   ├── hello.md
│   └── world.md

├── helloworld/
│   ├── __init__.py
│   ├── runner.py
│   ├── hello/
│   │   ├── __init__.py
│   │   ├── hello.py
│   │   └── helpers.py
│   │
│   └── world/
│       ├── __init__.py
│       ├── helpers.py
│       └── world.py

├── data/
│   ├── input.csv
│   └── output.xlsx

├── tests/
│   ├── hello
│   │   ├── helpers_tests.py
│   │   └── hello_tests.py
│   │
│   └── world/
│       ├── helpers_tests.py
│       └── world_tests.py

├── .gitignore
├── LICENSE
└── README.md
  • Web - Django 式
project/

├── app/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   │
│   ├── migrations/
│   │   └── __init__.py
│   │
│   ├── models.py
│   ├── tests.py
│   └── views.py

├── docs/

├── project/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py

├── static/
│   └── style.css

├── templates/
│   └── base.html

├── .gitignore
├── manage.py
├── LICENSE
└── README.md
  • Web - Flask 式

这种写法把大应用拆成小应用,例如 auth.py, blog.py, 如果程序大了以后可以把它转成 package.

flaskr/

├── flaskr/
│   ├── ___init__.py
│   ├── db.py
│   ├── schema.sql
│   ├── auth.py
│   ├── blog.py
│   ├── templates/
│   │   ├── base.html
│   │   ├── auth/
│   │   │   ├── login.html
│   │   │   └── register.html
│   │   │
│   │   └── blog/
│   │       ├── create.html
│   │       ├── index.html
│   │       └── update.html
│   │
│   └── static/
│       └── style.css

├── tests/
│   ├── conftest.py
│   ├── data.sql
│   ├── test_factory.py
│   ├── test_db.py
│   ├── test_auth.py
│   └── test_blog.py

├── venv/

├── .gitignore
├── setup.py
└── MANIFEST.in

另外,也推荐 @lepture 在 Structure of a Flask Project 设计的写法。

project/

├── app/
   ├── __init__.py # register your app in function `create_app`.
   ├── admin.py
   ├── apps.py
   
   ├── migrations/
      └── __init__.py
   
   ├── models/
      └── __init__.py
   
   ├── services/
      └── __init__.py
   
   ├── routes/
      └── __init__.py
   
   ├── templates/
      └── __init__.py

├── docs/

├── project/
   ├── __init__.py
   ├── settings.py
   ├── urls.py
   └── wsgi.py

├── static/
   └── style.css

├── templates/
   └── base.html

├── .gitignore
├── manage.py
├── LICENSE
└── README.md