前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用软件开发的工程化-Python

应用软件开发的工程化-Python

原创
作者头像
行者深蓝
修改2023-11-21 15:46:38
2260
修改2023-11-21 15:46:38
举报

Python

在 Linux(Ubuntu/Fedora)和 MacOS 下的 Python 开发环境设置步骤

  • Ubuntu/Linux 安装 Python 在终端中,更新系统软件包列表:sudo apt update 安装 Python:sudo apt install python3
  • Fedorta/Linux 安装 Python 在终端中,更新系统软件包列表:sudo dnf update 安装 Python:sudo dnf install python3
  • MacOS 安装 Python
代码语言:txt
复制
eval "$(/opt/homebrew/bin/brew shellenv)"       
(echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> ~/.zprofile       
source ~/.zprofile
brew install python
  • 验证Python 开发环境,在终端中,创建一个简单的 Python 脚本:保存为 main.pydef greet(name): print(f"Hello, {name}!")

if __name__ == "__main__":

代码语言:txt
复制
greet("Bard")

在终端中,运行脚本: python main.py

如果脚本成功运行,将会输出以下内容:Hello, Bard!

  • 额外的开发辅助工具参考
    • IDE: PyCharm、Visual Studio Code、IDLE
    • 代码库管理: Git、GitHub
    • 测试工具: unittest、pytest
    • 文档生成工具: Sphinx
    • 部署工具: Docker、WSGI
  • 额外说明
    • Python 版本: 建议使用最新的 Python 3.x 版本。
    • 默认解释器: 在 Ubuntu 和 Fedora 中,Python 3 默认是默认解释器。如果您的系统安装了多个 Python 版本,可以使用以下命令设置默认解释器:sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1
    • 开发环境配置: 可以根据自己的需要配置 Python 开发环境,例如安装第三方库、配置 IDE 等

项目代码参考

  • Python 语言项目开发的标准参考目录结构如下:
代码语言:txt
复制
myproject/
├── src/
│   └── example_pkg/
│       ├── __init__.py
│       └── core.py
├── tests/
├── test_main.py	
├── test_units.py
├── setup.py
├── Dockerfile
└── README.md

其中:

  • src 目录是项目的源码目录,存放项目的所有 Python 源代码文件,包括模块、类、函数等。
  • src/example_pkg 是项目的包目录,存放项目的所有包。
  • main.py 是项目的核心模块,存放项目的主要逻辑。
  • tests 目录是项目的测试目录,存放项目的所有测试用例。
  • setup.py 文件是项目的打包文件,用于打包项目为 Python 包。
  • README.md 文件是项目的说明文件,用于描述项目的功能、用法等。

具体的目录结构可以根据项目的实际情况进行调整。例如,对于简单的项目,可以将 src 和 tests 目录合并为一个目录。对于大型的项目,可以根据模块的功能划分多个子包。

Dockerfile

以下是一个 Dockerfile 多阶段构建的示例:

代码语言:shell
复制
#第一阶段:编译阶段
FROM python:3.10-buster AS builder

WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt
RUN python3 -m pip install build && python3 -m build

# 第二阶段:运行阶段
FROM python:3.10-slim-buster

WORKDIR /app
COPY --from=builder /app/main.py .
COPY --from=builder /app/dist/example_pkg-0.1.0.tar.gz /tmp/
RUN pip3 install /tmp/example_pkg-0.1.0.tar.gz && rm -f /tmp/example_pkg-0.1.0.tar.gz
CMD python3 main.py

这个 Dockerfile 使用了两阶段构建:

第一阶段:用于编译项目。该阶段使用了 python:3.10-buster 镜像作为基础镜像,并安装了编译依赖。然后,将项目的源代码复制到镜像中,并使用 pip3 进行编译。

第二阶段:用于运行项目。该阶段使用了 python:3.10-slim-buster 镜像作为基础镜像,并安装了运行依赖。然后,将第一阶段编译的产物复制到镜像中,并启动项目。

使用多阶段构建,可以将编译依赖和运行依赖分离,从而减少镜像的大小和体积。

Github CICD Pipeline

GitHub Actions 的管理界面 https://github.com/scaffolding-design/python/actions

流水线配置文件

流水线配置文件位于 Python.git 仓库中 .github/workflows/pipeline.yaml 由四个阶段组成:

  1. 构建测试:此阶段从源代码构建 APP, 并运行测试套件,以确保APP 正常工作。
  2. Docker 镜像:此阶段构建一个包含 APP 的 Docker 镜像。
  3. 设置 K3s:此阶段在远程服务器上设置 K3s 集群。
  4. 部署应用:此阶段将 APP 部署到 K3s 集群。

触发器

管道由以下事件触发:

  • 当打开或更新拉取请求时。
  • 当代码推送到主分支时。
  • 当工作流程手动调度时。

环境变量

管道使用以下环境变量:

  • TZ: 用于时间戳的时区。
  • REPO: Onwalk 制品存储库的名称。
  • IMAGE: 要构建的 Docker 镜像的名称。
  • TAG: 要分配给 Docker 镜像的标签。

如需在自己的账号运行这个Demo,只需要将 https://github.com/scaffolding-design/python.git 这个仓库Fork 到你自己的Github账号下,同时在

Settings -> Actions secrets and variables: 添加流水线需要定义的变量:

  • HELM_REPO_USER Artifact 仓库认证用户名
  • HELM_REPO_REGISTRY Artifact 仓库认证地址
  • HELM_REPO_PASSWORD Artifact 仓库认证密码
  • HOST_USER 部署K3S的主机OS登陆用户名
  • HOST_IP 部署K3S的主机IP地址
  • HOST_DOMAIN 部署K3S的主机域名
  • SSH_PRIVATE_KEY 访问K3S的主机的SSH 私钥

一起就绪后,就可以看到 DevOPS 实践/GitHub Actions CICD 一节所示,在这个工作流中,自动的完成C程序的编译,测试,打包容器镜像并推送到自定义的仓库,并完成K3S集群的初始化,将容器镜像部署到K3S集群中。

端点API

API 可以在本地通过 http://localhost:80/ 访问。确保服务器正在运行后进行请求。

  • 端点:/
    • 方法: GET
    • 描述: 返回问候消息。
    • 示例请求:curl http://localhost:80/
    • 预期输出:{"message": "Hello, world!"}
  • 端点:/user
    • 方法: POST
    • 描述: 根据提供的 JSON 负载创建用户。
    • 示例请求:curl -X POST -H "Content-Type: application/json" -d '{"username": "Bard", "age": 20}' http://localhost:80/user
    • 预期输出:{"username": "Bard", "age": 20}

制品下载地址

  1. GitHub Release: https://github.com/scaffolding-design/python/releases/tag/main
  2. 容器镜像仓库 : artifact.onwalk.net/base/scaffolding-design/python:<git_commit_id>

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python
  • 项目代码参考
  • Dockerfile
  • Github CICD Pipeline
    • 流水线配置文件
      • 触发器
        • 环境变量
          • 端点API
          • 制品下载地址
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档