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

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

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

Python

LinuxUbuntu/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
AI代码解释
复制
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
AI代码解释
复制
greet("Bard")

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

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

  • 额外的开发辅助工具参考
    • IDE: PyCharm、Visual Studio Code、IDLE
    • 代码库管理: GitGitHub
    • 测试工具: 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
AI代码解释
复制
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
AI代码解释
复制
#第一阶段:编译阶段
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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
多渠道批量打包
多渠道就是按照不同的市场进行发布不同的包,由于要改版本名,所以有的时候要打10多个包,在测试部的人员打一次包久会感觉不好,
粲然忧生
2022/08/02
5540
Ant打包
Ant打包 使用步骤: 对于已经存在的工程需要利用Ant命令更新一下: android update project -n Test -p D:/workspace/Test -s -t 1   -n (name) 后面跟的是这个工程的名子   -p (path)后面跟的是这个工程的目录路径   -t (target)后面是当前共有的SDK版本。表明我们的目标版本(如果有了project.properties就不用再跟target这个参数了). android list target这样就能够列
xiangzhihong
2018/01/26
1.6K0
Gradle Plugin for Android Development User Guide 1
Gradle Plugin for Android Development User Guide (1)
宅男潇涧
2018/08/01
8680
Gradle Plugin for Android Development User Guide 1
Ant 打包安卓apk(2)-手写版
由于我的项目中用到了 BuildConfig.java 文件, 在第一个生成 R 文件后我手动拷贝到了R.java的同级目录, 否则接下来的操作会报错
acc8226
2022/06/27
4470
Ant打包安卓apk(5)-多渠道(配置)打包方案 ant脚本
不废话, 直接上货 <?xml version="1.0" encoding="UTF-8"?> <project name="MyProject" default="init" basedir=".
acc8226
2022/05/17
6440
Flutter开发-发布时注意事项
Flutter 应用在 Android 端上启动时会有一段很明显的白屏现象,白屏的时长由设备的性能决定,设备性能越差,白屏时间越长. 然后这个白屏是可以控制的,在Android代码中的style.xml中有这样一段代码:
码客说
2020/06/02
1.2K0
Ant 打包安卓apk(1)-手动档
1. 根据资源文件和 AndroidManifest.xml 生成 R.java 文件  2. 处理 aidl,生成对应的 java文件,如果没有 aidl,则跳过  3. 编译工程源码(主项目,库)src 目录下所有的源码,同时上边生成的R.java和aidl生成的java文件也会被编译生成相应的 class 文件  4. 将第3步生成的class文件打包生成 .dex 文件  5. 将资源文件打包,生成初始的apk  6. 将第 4 步生成的 .dex 文件加入到apk中生成未签名的包  7. apk 签名
acc8226
2022/06/27
5290
Ant 打包安卓apk(1)-手动档
使用Jenkins搭建Android自动打包环境
概述 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目;监控外部调用执行的工作。 对于我们开发工程师来说,我们只管写代码,至于怎么打包,测试,我们是不需要过多关注的。而现在比较流行的方案是:使用Jenkins搭建Android自动打包。 Jenkins环境搭建 软件环境: windows7 64bit; jdk1.8 android sdk gradle2.10 配置Tomcat环境变量 找到path加上;%CATALIN
xiangzhihong
2018/02/06
2.7K0
使用Jenkins搭建Android自动打包环境
gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)
       最近一直在做android自动打包,之前已经完成了用纯命令行的形式打包、原生态ant脚本打包,和基于android的SDK的打包,并且实现了多渠道打包,后来同事推荐了gradle,网上的资料说gradle各种好,自己也感兴趣是实现一下,其实一般来说由于android对eclipse的支持减弱,大部分的人都是用gradle与android studio融合,这样面的例子也会比较多,但笔者所在的项目还是在eclipse的比较多,由于开发人员在移植过程中发现报错比较多所以一直没有完全移植(好吧,其实早晚会移植),所以笔者是用eclipse的IDE做的实验,下面先贴几个基础知识
粲然忧生
2022/08/02
7560
Android 编译工具 Ant
Ant,是一种基于Java的build工具,类似于(Unix)C中的make ,与基于shell命令的扩展模式不同,Ant用Java的类来扩展,用户不必编写shell命令。Ant本身是一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于Java是平台无关的外,脚本的格式是基于XML(默认为build.xml),比make脚本来说还要好维护一些。
阳光岛主
2019/02/19
1.6K0
Android 编译工具 Ant
Eclipse与Android源码中ProGuard工具的使用
由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解。 什么是ProGuard工具? ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类、字段和函数等,达到压缩、优化和混淆代码的功能。具体来说,使用ProGuard工具,可以达到下面两个目的: 删除了源文件中没有调用的那部分代码,最大化的精简了字节码
欢醉
2018/01/22
1.4K0
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业
章节内容【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例
卓伊凡
2025/01/17
4520
Android 开发必备知识:我和 Gradle 有个约会
0、讲个故事 0.1 Ant,我还真以为你是只蚂蚁 真正开始近距离接触编程其实是在2012年,年底的时候带我的大哥说,咱们这个 app 发布的时候手动构建耗时太久,研究一下 ant 脚本吧。 那个时候连 HashMap 都不知道是啥,可想开发经验几乎为零,一个小小的 ant 脚本看得我真是深深地感受到了这个世界充满的恶意。好在后来硬着头皮搞明白了什么 target 之类的鬼东西,不然就没有然后了。 0.2 Maven,你们真的会读这个单词么 Maven /`meivn/ 接触 Maven,完全是因为读陈雄华
腾讯Bugly
2018/03/22
9220
Android 开发必备知识:我和 Gradle 有个约会
gradle构建android项目详解
1、用Gradle构建 1.1 工程结构 如图所示,这是一个不能更普通的Android的Gradle工程了。 根目录下面的settings.gradle当中主要是用来include子模块的,比如我
xiangzhihong
2018/02/01
2.3K0
gradle构建android项目详解
Android使用Ant进行apk多渠道打包
Android使用Ant进行apk多渠道打包 前言: Ant 是什么? 详细介绍请看http://ant.apache.org/ 总之一句话:Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。 准备工作: android sdk中默认支持使用ant来执行编译动作。但是要想使用ant来进行编译,还需要ant的执行环境。 为了能顺利使用ant来编译,我们需要如下准备: 1,android sdk,最简单的是下载一个adt bundle即可; 2,ant包,下载链接:htt
用户1289394
2018/02/26
9150
Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)
最近有个需求一次要打包9个类型的App,而且常量和String.xml都有变量。虽然之前也是一直存在变量,但是每次也仅仅只打包一个。这让我每次改变量,打包9个。要是以后每次都打包9次,我得疯了。 根据之前的了解,gradle 应该是可以解决这个问题的。所以就仔细研究了一番。
用户2802329
2018/08/07
1.8K0
Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)
web项目ant打包完整案例
前两周做的web项目要部署到服务器上去,为了后续升级部署方便,决定采用Ant进行(开发用的myeclipse 8.5),ant打包测试也是在myeclipse上进行,build.xml测试完成后地通过
小小科
2018/05/02
2K0
web项目ant打包完整案例
ant的安装和使用
  1.1 添加环境变量:ANT_HOME=D:\software\ant\apache-ant-1.10.1
全栈程序员站长
2022/09/07
5150
ant的安装和使用
1,什么是ant「建议收藏」
大家好,又见面了,我是你们的朋友全栈君。1,什么是ant ant是构建工具 2,什么是构建 概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个 3,ant的好处 跨平台 –因为ant是使用java实现的,所以它跨平台 使用简单–与ant的兄弟make比起来 语法清晰–同样是和make相比 功能强大–ant能做的事情很多,可能你用了很久,你仍然不知道它能有多少功能。当你自己开发一些ant插件的时候,你会发现它更多的功能。 4
全栈程序员站长
2022/07/25
1.1K0
Ant学习
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
1K0
推荐阅读
相关推荐
多渠道批量打包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档