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