1. 程式人生 > 其它 >python軟體開發目錄設計規範

python軟體開發目錄設計規範

技術標籤:Python

資料來源:https://book.apeland.cn/details/339/

軟體開發目錄

  • 目錄可參考:https://github.com/pallets/flask
Foo/
|-- bin/
|   |-- foo
|
|-- src/
|   |-- tests/
|   |   |-- __init__.py
|   |   |-- test_main.py
|   |
|   |-- __init__.py
|   |-- main.py
|
|-- docs/
|   |
|   |-- abc.rst
|
|-- conf.py
|-- setup.py
|-- requirements.
txt |-- README
  • bin/: 存放專案的一些可執行檔案,當然你可以起名script/之類的也行。

  • src/: 存放專案的所有原始碼。(1) 原始碼中的所有模組、包都應該放在此目錄。不要置於頂層目錄。(2) 其子目錄tests/存放單元測試程式碼; (3) 程式的入口最好命名為main.py。

  • docs/: 存放一些文件。

  • setup.py: 安裝、部署、打包的指令碼。

  • requirements.txt: 存放軟體依賴的外部Python包列表。

  • README: 專案說明檔案。

  • conf.py:配置檔案

README

這個我覺得是每個專案都應該有的一個檔案,目的是能簡要描述該專案的資訊,讓讀者快速瞭解這個專案。

它需要說明以下幾個事項:

  • 軟體定位,軟體的基本功能。
  • 執行程式碼的方法: 安裝環境、啟動命令等。
  • 簡要的使用說明。
  • 程式碼目錄結構說明,更詳細點可以說明軟體的基本原理。
  • 常見問題說明。

requirements.txt

這個檔案存在的目的是:

  • 方便開發者維護軟體的包依賴。將開發過程中新增的包新增進這個列表中,避免在 setup.py 安裝依賴時漏掉軟體包。
  • 方便讀者明確專案使用了哪些Python包。
  • 如下所示
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile requirements/dev.in
# alabaster==0.7.12 # via sphinx appdirs==1.4.4 # via virtualenv attrs==20.2.0 # via pytest babel==2.8.0 # via sphinx blinker==1.4 # via -r requirements/tests.in certifi==2020.6.20 # via requests cfgv==3.2.0 # via pre-commit chardet==3.0.4 # via requests click==7.1.2 # via pip-tools distlib==0.3.1 # via virtualenv docutils==0.16 # via sphinx filelock==3.0.12 # via tox, virtualenv greenlet==0.4.17 # via -r requirements/tests.in identify==1.5.6 # via pre-commit idna==2.10 # via requests imagesize==1.2.0 # via sphinx iniconfig==1.1.1 # via pytest jinja2==2.11.2 # via sphinx markupsafe==1.1.1 # via jinja2 nodeenv==1.5.0 # via pre-commit packaging==20.4 # via -r requirements/docs.in, pallets-sphinx-themes, pytest, sphinx, tox pallets-sphinx-themes==1.2.3 # via -r requirements/docs.in pip-tools==5.3.1 # via -r requirements/dev.in pluggy==0.13.1 # via pytest, tox pre-commit==2.8.2 # via -r requirements/dev.in py==1.9.0 # via pytest, tox pygments==2.7.2 # via sphinx, sphinx-tabs pyparsing==2.4.7 # via packaging pytest==6.1.2 # via -r requirements/tests.in python-dotenv==0.15.0 # via -r requirements/tests.in pytz==2020.1 # via babel pyyaml==5.3.1 # via pre-commit requests==2.24.0 # via sphinx six==1.15.0 # via packaging, pip-tools, tox, virtualenv snowballstemmer==2.0.0 # via sphinx sphinx-issues==1.2.0 # via -r requirements/docs.in sphinx-tabs==1.3.0 # via -r requirements/docs.in sphinx==3.2.1 # via -r requirements/docs.in, pallets-sphinx-themes, sphinx-issues, sphinx-tabs, sphinxcontrib-log-cabinet sphinxcontrib-applehelp==1.0.2 # via sphinx sphinxcontrib-devhelp==1.0.2 # via sphinx sphinxcontrib-htmlhelp==1.0.3 # via sphinx sphinxcontrib-jsmath==1.0.1 # via sphinx sphinxcontrib-log-cabinet==1.0.1 # via -r requirements/docs.in sphinxcontrib-qthelp==1.0.3 # via sphinx sphinxcontrib-serializinghtml==1.1.4 # via sphinx toml==0.10.2 # via pre-commit, pytest, tox tox==3.20.1 # via -r requirements/dev.in urllib3==1.25.11 # via requests virtualenv==20.1.0 # via pre-commit, tox # The following packages are considered to be unsafe in a requirements file: # pip # setuptools

setup.py

  • 一般來說,用setup.py來管理程式碼的打包、安裝、部署問題。業界標準的寫法是用Python流行的打包工具setuptools來管理這些事情
  • 示例1
from setuptools import find_packages, setup

setup(
    name='pkDemo',
    version='0.1',
    install_requires=[
        "Werkzeug>=0.15",
        "Jinja2>=2.10.1",
        "itsdangerous>=0.24",
        "click>=5.1",
    ],
)
  • 示例2
from setuptools import find_packages, setup

setup(
    name='pkDemo',
    version='0.1',
    packages=find_packages(),
)

conf.py

  • 配置檔案,可以.ini或者.yaml格式,看專案需要