python 项目工程化开发

虚拟环境工具

安装poetry

pip install -U peotry

上述方式不行时

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python

Pastedimage20230814224730
加入环境变量
Pastedimage20230814224849

初始化项目

安装cookiecutter

pip install -U cookiecutter

初始化项目

cd workspace
cookiecutter https://github.com/pyloong/cookiecutter-pythonic-project
D:\project\py_pro_guide>cookiecutter https://github.com/pyloong/cookiecutter-pythonic-project
  [1/12] project_name (My Project): Time Count   
  [2/12] project_slug (time_count):
  [3/12] project_description (My Awesome Project!): to count time used
  [4/12] author_name (Author): qrrk
  [5/12] author_email (qrrk@example.com): qierenrongku@qq.com
  [6/12] version (0.1.0):
  [7/12] Select python_version
    1 - 3.10
    2 - 3.11
    Choose from [1/2] (1): 2
  [8/12] use_src_layout (y):
  [9/12] use_poetry (y):
  [10/12] use_docker (n):
  [11/12] Select ci_tools
    1 - none
    2 - Gitlab
    3 - Github
    Choose from [1/2/3] (1):
  [12/12] init_skeleton (n):

会生成如下的工程目录

D:\project\py_pro_guide>tree /f
D:.
└─time_count
    │  .editorconfig
    │  .gitignore
    │  .pre-commit-config.yaml
    │  LICENSE
    │  pyproject.toml  # 目初始依赖,和项目的描述信息
    │  README.md
    │  tox.ini        # 任务自动化执行逻辑
    │
    ├─docs
    │      development.md
    │
    ├─src    # 放源代码
    │  └─time_count
    │          __init__.py
    │
    └─tests  # 测试目录
            conftest.py
            settings.yml
            test_version.py
            __init__.py

初始化项目环境

使用 poetry 初始化一个虚拟环境

D:\project\py_pro_guide>cd time_count
D:\project\py_pro_guide\time_count>poetry install -v
**C:\Users\xsc\AppData\Local\pypoetry\Cache\virtualenvs\time-count-dAro35JJ-py3.11\Scripts**

一些工具

在生成的 pyproject.toml 文件中,默认添加了一些开发环境中常用的工具。

  • isortisort 是一个自动格式化导入工具
  • pylintpylint 是一个检测代码风格工具
  • pytestpytest 是一个更加易用的测试框架,兼容 unittest 测试框架
  • pytest-covpytest-cov 是 pytest 的 Coverage 插件,用来统计测试覆盖率
  • mkdocsmkdocs 是一个项目文档构建工具,使用 markdown 编写内容,构建生成文档页面。
  • mkdocs-materialmkdocs-material 是基于 mkdocs 构建文档,并提供现代化主题的库。
  • toxtox 是一个任务自动化工具

项目开发

先将项目安装到python环境中

D:\project\py_pro_guide\time_count>poetry install
Installing dependencies from lock file

No dependencies to install or update

Installing the current project: time_count (0.1.0)

编写代码

isort . # 在项目根目录运行 isort对导入进行格式化
isort . --check-only --diff # 此操作会自动修改代码,将导入的包格式化
pylint tests src # 项目根目录运行pylint检查代码是否规范

测试

poetry add --group dev pytest-mock

如果感觉每次运行多个命令比较繁琐,可以在项目根目录中运行 tox 自动化完成代码测试、导包检查和代码风格检查。

tox

打包发布

如果希望别人能更方便的使用项目,可以将项目打包发布到 pypi 中,然后在需要使用的地方运行

pip install -U word-count

但是安装到环境后去运行 cmdline.py 会比较麻烦,所以需要将 cmdline.py 注册成可执行命令。

修改 pyproject.toml ,增加如下内容:

[tool.poetry.plugins.console_scripts]
time_count = "time_count.cmdline:main"`

当使用 pip 命令将项目包安装到环境后,会自动注册一个 time_count 的可执行命令。

再次将本地项目以可编辑方式安装到当前 Python 环境:

poetry install`

然后就可以正常使用 time_count` 命令:

$ time_count -h 
usage: word_count [-h] -s SOURCE -d DEST

optional arguments:
-h, --help show this help message and exit -s SOURCE, 
--source SOURCE Source file used for count. 
-d DEST, 
--dest DEST Dest file used for count result

运行打包命令:

poetry build`

sdist 会将项目打包成源码包, bdist_wheel 会将项目打包成编译后的二进制包。

打包后的文件在 dist 目录中。可以直接在其他地方运行 pip install word_count.wheel 安装。

发布

将开发好的项目发布到索引仓库,或内网的私有仓库。

poetry publish`

默认会将项目发布到 pypi 中,所以需要有对应的登录账号。

参考:快速上手 - Python 项目工程化开发指南 (pyloong.github.io)

posted @ 2025-02-02 22:37  且任荣枯  阅读(1)  评论(0编辑  收藏  举报