浅谈Python项目开发&管理

Python中项目管理与测试 通过合理的项目结构、依赖管理、版本控制以及单元测试、集成测试、持续集成等工具和流程,开发者能够确保代码的质量和可维护性。在 Python 项目开发过程中,项目管理和测试是确保代码质量和稳定性的重要环节。通过合理的项目结构、依赖管理、代码版本控制、自动化测试,以及持续集成等手段,开发者可以确保项目的可维护性和扩展性。项目管理的核心是确保项目的依赖、结构、开发和部署等过程有条不紊地进行。是 Python 标准库中自带的单元测试框架,类似于 Java 的 JUnit,它通过类和方法的方式定义测试用例。 阅读详情

本文主要探讨的是个人在Python项目开发&管理这块的一些经验之谈,经过在团队实践后主要内容总结如下:

  • 基础环境管理

  • 编码标准&规范化

  • 远程开发

  • 项目脚手架

???? 环境管理

使用Anaconda和Pipenv共同管理Python项目环境

环境管理这块是个很普遍的问题,其面临的问题如下:

  • 如何对不同项目,任意Python版本的环境进行管控

  • 如何对不同项目,内外网Python依赖库进行管控(有些包是公司内部开发,那么对于项目来说就需要同时管控内外网下的第三方包)

对于上面提到的问题,实际上解决问题的方向都是一致的,那就是引入虚拟环境,使得每个项目都有一个专属环境就可以了。

如果你的公司在生产环境中使用Python有一定的年头,如3~5年,可能有一些老的项目还在用Python3.5甚至Python2.7,那么基本都会面临不同项目不同Python版本的问题。

此时,面对的问题就是第一点提到的不同项目需要的Python环境不同的问题。对于这种情况,可以直接在电脑下载各个版本的Python环境,随后到任意项目下就选用任意版本的Python环境即可,举个例子:

  • 项目 P_01 依赖Python3.6:分配Python3.6环境

  • 项目 P_02 依赖Python3.7:分配Python3.7环境

对于各个不同版本Python环境的管理,个人推荐使用Anaconda[1]:

# Mac Linux Win全平台支持
# 以Linux为例
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2021.05-Linux-x86_64.sh
chmod a+x ./Anaconda3-2021.05-Linux-x86_64.sh
./Anaconda3-2021.05-Linux-x86_64.sh

安装完成后,即可创建不同的Python环境:

# 其他版本的创建类似
conda create -n python36 python=3.6
# 列出Python环境
conda env list

那么对于项目 P_01,只需要在项目根目录下进行刚才建立的虚拟环境即可source activate python36,进入相关环境后直接在环境内安装相关依赖包即可。

也就是说,环境 python36 是专为项目 P_01 服务的,其他项目只需要再建立一个环境即可。接下来说说为什么引入Pipenv:

  • 支持对环境和第三方依赖进行管理

  • 很好地管控不同环境下的第三方库,如项目的一部分依赖来自官方,一部分来自公司内部(不能公开)

以我个人举例,构建一个Python项目的基础步骤就是:

mkdir py_demo && cd py_demo
# 如果项目依赖3.6
pipenv install --python ~/anaconda3/envs/python36/bin/python3.6 --skip-lock
# 如果项目依赖3.7
pipenv install --python ~/anaconda3/envs/python37/bin/python3.7 --skip-lock

是不是很方便?这一番介绍下来如果你对Anaconda和Pipenv的功能边界还是有疑惑的话,可以看看下方我画的一张图(个人理解,欢迎讨论):

pipenv

???? 编码标准

对于编码标准,我推荐跟着社区的PEP8走,之前我就已经翻译过一篇如何用 PEP 8 编写优雅的 Python 代码[2],所以编码标准这块就麻烦诸位移步看下哈。

Guido 推荐规范

???? 规范化

所谓标准,如果纯靠人自觉来遵守,实际上就比较理想主义,实际操作下来,我在团队中在规范化这块写了个ci工具,核心就是使用了以下工具来自动标准规范化:

  • black:代码格式化

  • pylint:代码检查

  • isort:导包规划化

  • flake8(mccabe):代码复杂度检查

接下来我将以VS Code为例,说一下怎么配置,先进行基础的准备工作:

pip install black pylint flake8

打开VS Code后请先在设置中配置好 python  插件关于 black&isort  的执行路径:

将路径配置好之后,然后在项目根目录新增 setup.cfg :

[isort]
multi_line_output=3
include_trailing_comma=True
force_grid_wrap=0
use_parentheses=True
line_length=88
known_first_party=src
lines_between_types=1
default_p=THIRDPARTY
ps=FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
[flake8]
ignore = D203
max-line-length = 88
exclude = .git,__pycache__,old,build,dist
max-complexity = 10

注意这里,我们做了flake8关于复杂度的配置,实际上就相当于在根目录执行:

flake8 --config=./setup.cfg --exit-zero --max-complexity 10 src

最后再针对项目进行以下设置:

  • 相关配置文件的路径

  • 自动保存即自动格式化的

编辑.vscode/settings.json配置文件即可:

{
    "python.linting.pylintEnabled": true,
    "python.sortImports.args": [
        "--settings-path=${workspaceFolder}/setup.cfg"
    ],
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    },
    "python.formatting.provider": "black",
    "python.envFile": "${workspaceFolder}/.env",
    "python.linting.enabled": true
}

说完了标准化,接下来整起来代码分析工具Pylint ,它分析代码中的错误,查找不符合代码风格标准和有潜在问题的代码。

Pylint  本身的校验还算是比较严格,所以需要添加一些配置限制一些没必要的错误提示,可以在项目根目录下建立文件 .pylintrc :

[FORMAT]
max-line-length=120
[MESSAGES CONTROL]
disable=C0103,C0330,W0221,R0913,R0914,R0903,R0902,R0801

然后在项目根目录下执行:

pylint --rcfile=./.pylintrc --exit-zero src

随后就可以看到输出的优化建议以及评分:

score

???? 远程开发

对于远程开发,我主要调研以下两个方向:

  • 在服务器搭建远程开发环境,基于code-server[3]

  • 本地编码,利用远程服务器运行,Pycharm可行,VS Code应该也行

最终我选用了第一个方案,主要其云开发的优势非常吸引人:

  • 何时何地能联网就能编码

  • 基于 Code Server 和 VS Code 一样的手感,香

其实Code Server的安装非常简单,直接执行以下命令(先安装 Docker):

mkdir ~/code_data && cd ~/code_data
docker run -it --user root -p 0.0.0.0:8080:8080 -v "$PWD:/home/coder/project" -e PASSWORD="your password" -d codercom/code-server

我基于官方镜像还增加了以下个性化配置,这块大家可以根据自己的喜好来配置:

  • 支持 oh my zsh

  • 使用国内源

  • 支持 anaconda&pipenv 项目管理

  • 默认搭建了 Python 开发环境

    • pipenv 管理项目

    • black&isort&pylint 进行标准化

项目脚手架

基于公司业务形成开发标准,再基于开发标准抽象出业务模块,有了通用的业务模块实际上我们就可以构建自己的项目脚手架,我在自己团队中针对业务方向抽象了三个方向的开发代码模板:

  • API 服务模板:针对接口服务的通用模板,开发者直接在对应文件写逻辑即可,默认配好了服务发现、日志、配置热更、数据库操作、状态码管理等常规模块

  • 软实时服务模板:消费数据团队提供的主题,根据输入数据秒级响应结果,比如实时消费登录数据判断是否登录异常,配置了常见模块如消费模块、数据库操作模块、热更配置开发者直接在指定函数写调用业务即可

  • 离线服务模板:针对特征提取,基于各大云商,封装各种 ETL 常用模块,一切目的是为了提升开发效率

有了一些通用的模板,实际上就可以基于模板形成自己的脚手架,举个例子大家可能就比较清楚了,比如某个开发者想要开发一个离线特征提取服务,假设我们脚手架名字叫做oc_demo,那么他只需在终端执行oc_demo,然后跟着脚手架走:

# 设置作者名
export PROJECT_AUTHOR=howie6879
# 利用离线脚手架创建项目
oc_demo my_project

此时,脚手架就会工作,下拉通用模板,并做一些个性化改动,输出如下:

Cloning into 'my_project'...
remote: Enumerating objects: 1004, done.
remote: Counting objects: 100% (72/72), done.
remote: Compressing objects: 100% (59/59), done.
remote: Total 1004 (delta 27), reused 44 (delta 13), pack-reused 932
Receiving objects: 100% (1004/1004), 3.81 MiB | 2.32 MiB/s, done.
Resolving deltas: 100% (568/568), done.
######################################################
离线计算项目构建完成^_^
项目名称:my_project
作者:howie6879
建议Python版本:Python3.6
项目环境管理:Pipenv
开始:
    cd my_project
    pipenv install --python PYTHON36_PATH
######################################################

此时进入目录,作为开发者只需要在逻辑文件那里新建ETL即可,再也不用:

  • 每个成员建立不同风格的模块,维护起来麻烦

  • 不用重复性地造或者说复制他人写好的通用模块

  • 每个项目风格相同,上手快

???? 说明

在Python项目管理这块,上面提到核心内容的都是我2018年基于社区的一些默认推荐方式梳理的(远程开发除外),可能是我用着一直觉得没啥问题,所以现在团队用的还是这套,如果大家有什么更好的建议,欢迎交流,如果觉得不错,点个好看分享下吧哈哈。

参考资料

[1]

Anaconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/

[2]

如何用 PEP 8 编写优雅的 Python 代码: https://www.howie6879.cn/p/%E5%A6%82%E4%BD%95%E7%94%A8pep-8%E7%BC%96%E5%86%99%E4%BC%98%E9%9B%85%E7%9A%84python%E4%BB%A3%E7%A0%81/

[3]

code-server: https://github.com/cdr/code-server

PythonWeb开发项目完整案例(详细教程) PythonWeb开发是使用Python语言进行Web应用程序开发的过程。Python是一种简洁、易读且功能强大的编程语言,因此在Web开发领域广受欢迎。 阅读详情

相关推荐

Python 项目管理工具 Rye 的工作原理

本文简单介绍了rye的工作原理。在研究它的工作原理的过程中,看了一下rye的源代码。看起来项目不大,值得学习一下。如果你有兴趣,还可以深入地研究一下。我暂时就研究到这里了,以后也许发现了更多原理,再回来补充。

weixin_68789096的博客 912

Python项目开发

1.创建Python项目为pythontest1以及test1.py文件。3.输入九九乘法表程序,编译调试执行。5.命令行中下载安装pygame包。4.配置全局pip镜像为阿里镜像。创建成功就可以编写程序了。

Dream_weiwei的博客 4599

Python Web项目(Python3.6.4+Django2.0)

一、前言 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V。当然,网上也有人说Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。由于我也是刚开始接触Python Web,不好给大家解释其中的区别,给大家推荐一片文章:浅谈MVC、MTV和MVVM,理解django框架中的MTV与MVC模式其中还有作者对MVVM的理

PininQ的博客 4万+

浅谈Python中的内存管理 & 程序的内存布局

Python 的内存管理是通过私有堆空间来实现的。这个私有堆内存中存储了所有 Python 对象和数据结构。Python 的解释器自身则拥有对堆空间的访问权,程序员不能直接访问这个私有堆,但可以通过解释器的 API 来进行某些操作。:Python 的内存分配是从私有堆上进行的。这个堆内存包含了所有 Python 对象和数据结构。:Python 内部使用引用计数来跟踪每个对象的引用数量。当引用计数归零时,即对象不再被引用时,该内存就可以被回收。但这种机制有一个主要缺点:它不会处理引用循环。

青衫客36的博客 2435

Web | 浅谈用Python进行Web开发

Web | 浅谈用Python进行Web开发 Web开发这样一个大概念,对我这种小白来说,想学也不知道从哪下手。在网上广泛地浏览了一下这个方面的文章后,我发现当今Web开发的一大热门语言是Python(最大的当然还是PHP),而恰好我平常用Python也多,从Python入手,学习Web后端开发,也许要容易些。 1 WSGI, 即Web Server Gateway Interface Web开发...

人生代码 ---- 公众号 1973

浅谈五大Python Web框架

浅谈五大Python Web框架 转载:http://feilong.me/2011/01/talk-about-Python-web-framework 说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework、framework不可胜数,不完全列表见: http://wiki.python.org/moin/W...

人生代码 ---- 公众号 5501

浅谈如何用Python进行Web开发。

转载自品略图书馆http://www.pinlue.com/article/2020/04/2918/2410262790926.html Web开发这样一个大概念,对我这种小白来说,想学也不知道从哪下手。在网上广泛地浏览了一下这个方面的文章后,我发现当今Web开发的一大热门语言是Python(最大的当然还是PHP),而恰好我平常用Python也多,从Python入手,学习Web后端开发,也许要容易些。 1 WSGI, 即Web Server Gateway Interface Web开发有两..

yihuliunian的博客 578

Python项目管理与开发实战指南

本文还有配套的精品资源,点击获取 简介:在软件开发领域,项目管理是IT行业的核心职责之一。本篇简介将深入探讨一个以Python语言开发的项目结构和关键组成要素。重点介绍源代码、测试代码、配置文件、依赖管理、文档、版本控制、构建和部署、日志记录、资源文件以及虚拟环境等组成部分,为开发者提供全面的项目管理和开发实践指导。 1. 项目管理在软件开发中的重要性 1....

weixin_32311823的博客 1070

浅谈如何用Python进行Web开发

转载自品略图书馆http://www.pinlue.com/article/2020/04/2918/2410262790926.html Web开发这样一个大概念,对我这种小白来说,想学也不知道从哪下手。在网上广泛地浏览了一下这个方面的文章后,我发现当今Web开发的一大热门语言是Python(最大的当然还是PHP),而恰好我平常用Python也多,从Python入手,学习Web后端开发...

yihuliunian的博客 442

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件)

本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。

7z8x2c4v6b9的博客 711

别再手动切换了!用SP3485+三极管搞定RS485自动收发电路(附完整原理图)

本文详细介绍了如何利用SP3485芯片和三极管设计RS485自动收发电路,解决传统手动切换带来的IO资源占用和软件复杂度问题。通过原理分析、电路设计拆解和实战注意事项,帮助工程师打造稳定可靠的自动收发通信模块,显著提升系统性能和可靠性。

weixin_26833939的博客 514

python小项目案例-拯救Python新手的几个项目实战

原标题:拯救Python新手的几个项目实战Python 做小游戏实例一:24点游戏项目名称:经典趣味24点游戏程序设计(python) 实例二:五子棋游戏python学习关注我们企鹅qun: 8393 83765 各类入门学习资料免费分享哦!项目名称:python大作业 五子棋 人人对战 实例三:2048小游戏项目名称:Python实例浅谈之八2048游戏(字符界面) 实例四:街机小游戏项目名称:...

weixin_37988176的博客 2169

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 268

浅谈用Python进行Web开发

转自:微点阅读(www.weidianyuedu.com)微点阅读 - 范文大全 - 免费学习知识的网站 Web开发这样一个大概念,对我这种小白来说,想学也不知道从哪下手。在网上广泛地浏览了一下这个方面的文章后,我发现当今Web开发的一大热门语言是Python(最大的当然还是PHP),而恰好我平常用Python也多,从Python入手,学习Web后端开发,也许要容易些。 1 WSGI, 即Web Server Gateway Interface Web开发有两大基础: HTTP协议 HTML语

asd3331380的博客 287

若依(RuoYi)项目里,Quartz定时任务踩坑实录:并发控制、事务回滚与异常处理

本文深入解析若依(RuoYi)项目中Quartz定时任务的并发控制、事务回滚与异常处理三大核心问题。通过实战案例揭示@DisallowConcurrentExecution注解的局限性和Redis分布式锁的应用,详细讲解Spring事务集成方案及多数据源事务管理,并提供生产级监控体系搭建指南,帮助开发者规避Quartz在生产环境中的常见陷阱。

weixin_28731223的博客 413

磁悬浮轴承控制策略设计及性能对比

摘要:针对高速磁悬浮转子控制问题,本文提出多方案对比分析。建立含陀螺效应的5自由度动力学模型,分析陀螺耦合、质量不平衡等关键挑战。对比四种控制策略:基础PID解耦、交叉反馈+自适应陷波、H∞鲁棒+前馈补偿、滑模控制+观测器,从实时性、鲁棒性等维度评估优劣。推荐采用交叉反馈+H∞+自适应陷波的混合方案,通过内环电流环与外环位置环协同,实现陀螺效应动态解耦和扰动抑制。实施步骤包括系统辨识、控制器设计、硬件部署等,需配合实验验证与参数整定。该方案综合性能最优,适用于高转速、强扰动场景。

技术工作者 1776

pythonweb开发-Web | 浅谈用Python进行Web开发

Web开发这样一个大概念,对我这种小白来说,想学也不知道从哪下手。在网上广泛地浏览了一下这个方面的文章后,我发现当今Web开发的一大热门语言是Python(最大的当然还是PHP),而恰好我平常用Python也多,从Python入手,学习Web后端开发,也许要容易些。1 WSGI, 即Web Server Gateway InterfaceWeb开发有两大基础:HTTP协议HTML语言HTTP协议在...

weixin_37988176的博客 398

torch.nn.rnn实现循环神经网络

------------------------------------nn.rnn模型实现。#------------------------------------模型实现。#-----------------------------------训练模型。#-----------------------------------训练模型。#--------------------------------读取数据。实现循环神经网络,并在至少一个数据集上进行实验,从训练时间、预测精度、...

matlab_python22的博客 2975

完整的python项目实例-拯救Python新手的几个项目实战

原标题:拯救Python新手的几个项目实战Python 做小游戏实例一:24点游戏项目名称:经典趣味24点游戏程序设计(python) 实例二:五子棋游戏python学习关注我们企鹅qun: 8393 83765 各类入门学习资料免费分享哦!项目名称:python大作业 五子棋 人人对战 实例三:2048小游戏项目名称:Python实例浅谈之八2048游戏(字符界面) 实例四:街机小游戏项目名称:...

q6q6q的专栏 2886

搞定ESD(四):ESD干扰耦合路径深入分析(二)

静电放电过程中静电干扰主要通过三种间接耦合方式干扰敏感源,即电场耦合、磁场耦合、地弹。前文已经深入分析了静电放电过程中的电场耦合,今天就谈谈静电放电过程中的磁场耦合,也可以理解环路耦合。熟话说的好〝人往高处走,水往低处流〞,静电电流也会选择阻抗最低的路径返回到源端。静电电流流会源端的路径实际上就构成了电流环路,当敏感信号形成的电流环路与静电电流环路存在共环路时,就会将静电放电干扰耦合到敏感信号环路内,干扰敏感信号。

记得诚 2798

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1372

浅谈python的上下文管理

上下文管理的作用: 1.操作(创建/获取/释放)资源; 2.处理异常; 上下文管理的好处: 1.提高代码的复用率; 2.提高代码的优雅度; 3.提高代码的可读性; 好,带着上下文管理器的好处和作用进入正题… 什么是上下文管理器: 上下文管理器是指在一段代码执行之前执行另一段代码,用于一些预处理工作;执行之后再执行另一段代码,用于一些清理工作。可以理解为一个助理、管家,你在做什么事情之前他们会帮你安排好一切和之后的善后。 在平时敲代码过程中我们经常用到下面这段代码: with open('test.txt',

xiaoxin_OK的博客 4033

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python大型项目架构_浅谈五大Python Web框架

转载:说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework、framework不可胜数,不完全列表见:http://wiki.python.org/moin/WebFrameworks。虽然另一大脚本语言PHP也有不少框架,但远没有Python这么夸张,也正是因为Python Web Framework(Pyth...

weixin_39660931的博客 662

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python写web是主流吗_Web | 浅谈用Python进行Web开发

Web | 浅谈用Python进行Web开发​mp.weixin.qq.com## Web | 浅谈用Python进行Web开发Web开发这样一个大概念,对我这种小白来说,想学也不知道从哪下手。在网上广泛地浏览了一下这个方面的文章后,我发现当今Web开发的一大热门语言是Python(最大的当然还是PHP),而恰好我平常用Python也多,从Python入手,学习Web后端开发,也许要容易些。###...

weixin_39585617的博客 125

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 我的周刊(第001期)
下一篇: 我的周刊(第002期)
老胡的储物柜
博客等级 码龄12年 1145粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值