Appearance
开发指南
开始
工具
- PyCharm 下载
环境
使用 Anaconda 管理Python环境
- 应用开发
- Python 3.9.13
- Anaconda 2022.10.0
- AI开发
- Python 3.10.9
- Anaconda 2023.03-1
Python镜像站
使用内部镜像站
工程开发
获取模版
使用 git clone 获取模版仓库代码
目录结构
📂 项目根目录
📂 data [数据文件目录]
📂 docs [文档中心]
📂 sql
📃 init.sql [初始化脚本]
📃 table.sql [应用使用到的表建表脚本]
📃 功能模型说明.md [项目的功能模型说明,包含使用到的表列表、核心规则说明]
📃 定时任务调度.md [项目的功能定时任务说明]
📃 上线部署内容.md [部署上线时应该执行的流程]
📂 resources [资源目录]
📂 src [源代码目录]
📂 com
📂 investoday
📂 config [编译配置]
📃 datasource.yml [数据库配置]
📃 log.yml [日志配置]
📂 utils [工具类]
📃 cfgUtils.py [配置文件工具类]
📃 dbUtils.py [数据库工具类]
📃 logUtils.py [日志工具类]
📃 sqlUtils.py [SQL工具类]
📂 requests [第三方包目录]
📂 test [测试代码目录]
📃 README.md
📃 pyproject.toml [poetry项目管理配置]
📃 tox.ini [项目测试环境及测试用例配置]
📃 requirements.txt [包管理]
📃 .gitgnore [git文件忽略]📂 项目根目录
📂 data [数据文件目录]
📂 docs [文档中心]
📂 sql
📃 init.sql [初始化脚本]
📃 table.sql [应用使用到的表建表脚本]
📃 功能模型说明.md [项目的功能模型说明,包含使用到的表列表、核心规则说明]
📃 定时任务调度.md [项目的功能定时任务说明]
📃 上线部署内容.md [部署上线时应该执行的流程]
📂 resources [资源目录]
📂 src [源代码目录]
📂 com
📂 investoday
📂 config [编译配置]
📃 datasource.yml [数据库配置]
📃 log.yml [日志配置]
📂 utils [工具类]
📃 cfgUtils.py [配置文件工具类]
📃 dbUtils.py [数据库工具类]
📃 logUtils.py [日志工具类]
📃 sqlUtils.py [SQL工具类]
📂 requests [第三方包目录]
📂 test [测试代码目录]
📃 README.md
📃 pyproject.toml [poetry项目管理配置]
📃 tox.ini [项目测试环境及测试用例配置]
📃 requirements.txt [包管理]
📃 .gitgnore [git文件忽略]将原基金评价项目代码进行调整,将SQL操作、df数据操作、配置函数调用进行了分离,将原本多个log.yml重复定义使用的配置融合写成了loginit,调用时只需要导入setup_logging模块,值传入为dict类型,例如:setup_logging({"logfile" : "info.log"}),运行时需查看项目目录是否已创建log文件夹,否则会报错。
模板使用事项
- 测试代码需放在
test目录下,正式上线时应迁移到src.com.investoday下 - 由于目录结构有多层目录,所以在使用导入其它目录下的模块时,应在当前程序文件中添加以下代码
import sys
from pathlib import Path
# 获取当前文件所在目录的绝对路径
current_dir = Path(__file__).resolve().parent
sys.path.append(str(current_dir))
# 向上回溯两级,即返回到 investoday 目录
project_root = current_dir.parent
sys.path.append(str(project_root))import sys
from pathlib import Path
# 获取当前文件所在目录的绝对路径
current_dir = Path(__file__).resolve().parent
sys.path.append(str(current_dir))
# 向上回溯两级,即返回到 investoday 目录
project_root = current_dir.parent
sys.path.append(str(project_root))准备工作
- 安装
pipx:pip install pipx - 使用
pipx安装poetry:pipx install poetry - 使用
pipx安装tox:pipx install tox
在虚拟环境中安装 poetry 和 tox 应用程序可以生成一个全局可用的 exe 文件,避免了与使用 pip 安装的包产生环境冲突的问题。
poetry
poetry 是一个 Python 虚拟环境和依赖管理工具,它还提供了包管理功能,比如打包和发布。您可以使用 poetry 来管理 Python 库和 Python 程序。
一、安装Poetry
使用pipx安装Poetry:
pipx install poetrypipx install poetry二、初始化项目
poetry init初始化项目,创建pyproject.toml文件。默认回车,可以在创建时修改内容,也可以创建后再修改内容。
初始化完成之后生成pyproject.toml文件, 内容如下:
[tool.poetry]
name = "python"
version = "0.1.0"
description = ""
authors = ["刘殿欢乐 <liudhl@investoday.com.cn>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.9"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"[tool.poetry]
name = "python"
version = "0.1.0"
description = ""
authors = ["刘殿欢乐 <liudhl@investoday.com.cn>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.9"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"[tool.poetry]:定义项目的元数据,如名称、版本、作者、许可证等。name:项目名称
version:项目版本号
description:项目描述
author:项目作者
readme:说明文档
[tool.poetry.dependencies]:定义管理依赖项的模块。例如:
[tool.poetry.dependencies]
python = "^3.9"
requests = "^2.25.1"
numpy = "^1.19.5"[tool.poetry.dependencies]
python = "^3.9"
requests = "^2.25.1"
numpy = "^1.19.5"[build-system]:定义构建系统的元数据,如依赖项和构建工具等。poetry-core是一个构建项目时必须的依赖项。如果你的项目需要其他的构建依赖项,也可以将它们添加到这个列表中。它会使用poetry.core.masonry.api模块中的API进行构建。
三、安装依赖
poetry install 创建虚拟环境,读取pyproject.toml中的所有依赖并安装,执行完成之后会生成一个虚拟环境的目录和一个镜像文件poetry.lock
四、运行项目
poetry run python xxx.py 自动检测到当前虚拟环境并执行py程序
Tox
Tox 是一个用于自动化测试的工具,它能够自动地创建虚拟环境,安装依赖,并运行测试脚本。使用 Tox 能够确保你的项目在不同的 Python 版本和依赖包上都能正常运行。
一、安装 Tox
使用 pipx 安装 Tox:
pipx install toxpipx install tox二、创建 tox.ini 文件
在项目的根目录下创建一个名为 tox.ini 的文件,并添加以下内容:
[tox]
envlist = py37,py38,py39
[testenv]
deps =
pytest
commands =
pytest tests/[tox]
envlist = py37,py38,py39
[testenv]
deps =
pytest
commands =
pytest tests/其中,envlist 表示要测试的 Python 版本列表。deps 是测试所需的依赖,可以根据项目需要进行修改。commands 则是测试脚本的命令,这里使用 pytest 和 pytest-cov 进行测试和测试覆盖率的计算。
三、运行测试
在项目的根目录下运行以下命令:
toxtoxTox 将会创建虚拟环境,并在每个虚拟环境中安装依赖和运行测试脚本。如果所有测试都通过了,则输出类似于以下内容的信息:
py37: SKIP (0.42 seconds)
py38: SKIP (0.03 seconds)
py39: OK (11.02=setup[10.41]+cmd[0.61] seconds)
congratulations :) (11.67 seconds)py37: SKIP (0.42 seconds)
py38: SKIP (0.03 seconds)
py39: OK (11.02=setup[10.41]+cmd[0.61] seconds)
congratulations :) (11.67 seconds)如果有测试失败,则会显示相应的错误信息。
注意事项
执行tox时会根据pyproject.toml的name项目名称找该对应的package模块,所以我们需要在项目目录中创建一个相同名字的package包来避免这个错误

创建一个相同名字的模块包,__init__.py内容可以为空

如果没有相对应的模块包目录,则会出现以下错误

显示没有找到package,无法成功执行