Skip to content
本页导航

开发指南

开始

工具

环境

使用 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文件夹,否则会报错。

模板使用事项

  1. 测试代码需放在test目录下,正式上线时应迁移到src.com.investoday
  2. 由于目录结构有多层目录,所以在使用导入其它目录下的模块时,应在当前程序文件中添加以下代码
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))

准备工作

  1. 安装 pipxpip install pipx
  2. 使用 pipx 安装 poetrypipx install poetry
  3. 使用 pipx 安装 toxpipx install tox

在虚拟环境中安装 poetrytox 应用程序可以生成一个全局可用的 exe 文件,避免了与使用 pip 安装的包产生环境冲突的问题。

poetry

poetry 是一个 Python 虚拟环境和依赖管理工具,它还提供了包管理功能,比如打包和发布。您可以使用 poetry 来管理 Python 库和 Python 程序。

一、安装Poetry

使用pipx安装Poetry:

pipx install poetry
pipx install poetry
二、初始化项目
  • poetry init 初始化项目,创建pyproject.toml文件。默认回车,可以在创建时修改内容,也可以创建后再修改内容。

初始化完成之后生成pyproject.toml文件, 内容如下:

[tool.poetry]
name = "python"
version = "0.1.0"
description = ""
authors = ["刘殿欢乐 <[email protected]>"]
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 = ["刘殿欢乐 <[email protected]>"]
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 tox
pipx 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 则是测试脚本的命令,这里使用 pytestpytest-cov 进行测试和测试覆盖率的计算。

三、运行测试

在项目的根目录下运行以下命令:

tox
tox

Tox 将会创建虚拟环境,并在每个虚拟环境中安装依赖和运行测试脚本。如果所有测试都通过了,则输出类似于以下内容的信息:

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包来避免这个错误

image-pyproject_pack

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

image-package

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

image-error

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

Python SDK

PySpark

lhiro