工程实践 使用本地包开发python项目

当python项目比较庞大, 把共用的公共函数和方法封装成一个本地包不仅便于在不同项目间复用,还能通过统一的方式读取资源文件, 是一个很好的工程实践. 下面来介绍一下这种开发方式.

我们需要把公共部分代码以一个python包的规范进行开发, 再以 edit 模式安装在本地python包的目录中. 就可以在不同的子项目中直接用import引用公共的库和方法, 公共库有更新时, 各个子项目也可以无痛的进行更新. 免去了处理相关路径, 等各种麻烦事.

公共模块的结构:

myproject/
├── mypackage/ # 包目录(必须有 __init__.py)
│ ├── __init__.py # 包初始化文件
| ├── resources/ # 资源文件夹
| │ └── context.txt
│ ├── module1.py # 模块文件
│ └── submodule/ # 子包
│ ├── __init__.py
│ └── module2.py
├── tests/ # 测试目录(可选)
│ └── test_module1.py
├── pyproject.toml # 现代配置文件(推荐,Python 3.7+)
├── setup.py # 传统配置文件(可选,如果无 pyproject.toml)
├── README.md # 文档
└── LICENSE # 许可证

myproject 是项目根目录,其中的 mypackage 是你定义的 Python 包名称。pyproject.toml 是包的配置文件 (旧版的规范是用setup.py)

一个demo pyproject.toml 是这样的:

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta" [project]
name = "mypackage"
version = "0.1.0"
description = "My development package juset a demo pkg"
authors = [{name = "UnKnown", email = "unknown@email.com"}]
dependencies = [] # 依赖列表 [tool.setuptools.package-data]
mypackage = ["resources/*","resources/**/*"] # 包含资源文件

当我们把公共代码写好后, 用 pip install -e .的方式进行edit模式的安装. 之后在各个项目目中引用就是 from mypackage import xxx. 我们也可以用统一的路径来引用公共包中的资源文件, 所用的引用方式是借助 importlib 库中的 files方法. 比如你的包名是 mypackage , 有个context.txt 放在了 resources目录下, 引用文件路径就这样写: files("mypackage.resources").joinpath("context.txt")

from mypackage import sayHi
sayHi() from importlib.resources import files
print(files("mypackage.resources").joinpath("context.txt").read_text())

在mypackage内部, 各模块之间的import要使用相对引用, 如 from .module1 import func 这是Python所推荐的开发规范. 可在规避不同环境下的迁移问题.

当需要生产部署时, 我们可以用 python -m build 来编译生成wheel包. 把打包好的 wheel 在生产环境里安装.

更多内容:

https://www.codebonobo.tech/post/40#工程实践 使用本地包开发python项目

工程实践 使用本地包开发python项目的更多相关文章

  1. Eclipse开发Python项目

    最近倒腾python自带的开发工具idle,用的很不习惯,还是用Eclipse编写python项目方便(自动补齐,智能报错,调试方便),下面就说说怎么用Eclipse编写python代码吧~ 1.安装 ...

  2. python 项目中包中__init__.py文件的作用

    开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...

  3. Python环境搭建、python项目以docker镜像方式部署到Linux

    Python环境搭建.python项目以docker镜像方式部署到Linux 本文的项目是用Python写的,记录了生成docker镜像,然后整个项目在Linux跑起来的过程: 原文链接:https: ...

  4. 用Web抓包分析工具Livepool 实现本地替换开发

    这是官方的介绍: LivePool 是一个基于 NodeJS,类似 Fiddler 支持抓包和本地替换的 Web 开发调试工具,是 Tencent AlloyTeam 在开发实践过程总结出的一套的便捷 ...

  5. .NET Core开发:项目实践

    初始化项目 本来想详细讲一讲dotnet core的,但我对于dotnet core的研究还不到一星期,半吊子,脑子又笨,就不写那些理论出来误人子弟了,还是直接来一篇实践给大家做个参考.废话不多说,直 ...

  6. IDEA 学习笔记之 Python项目开发

    Python项目开发: 下载Python: https://www.python.org/downloads/release/python-363/ 安装Python: 配置环境变量(path): C ...

  7. Python最佳工程实践,建立一个完美的工程项目

    在程序开发时候一套好的开发环境和工具栈,可以帮我们极大的提高开发的效率,避免把大量时间浪费在周边琐事上.本文以Python为例,教大家如何快速打造完美的Python项目开发环境:内容涵盖了模块依赖管理 ...

  8. 软件开发流程-路飞项目需求- pip永久换源-虚拟环境-路飞项目前后端创建-包导入-后端项目调整目录

    目录 软件开发流程-路飞项目需求- pip永久换源-虚拟环境-路飞项目前后端创建-包导入-后端项目调整目录 今日内容概要 今日内容详细 1 软件开发流程 2 路飞项目需求 3 pip永久换源 4 虚拟 ...

  9. 转:MAVEN依赖的是本地工程还是仓库JAR包?

    相信大家都碰见过 maven 配置的依赖或者是 jar 包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看 maven 依赖的文件的时候,就能直接查看到源码. 一.本地工程依赖 举个例 ...

  10. Maven依赖的是本地工程还是仓库jar包?

    相信大家都碰见过maven配置的依赖或者是jar包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看maven依赖的文件的时候,就能直接查看到源码. 一.本地工程依赖 举个例子,其架构如 ...

随机推荐

  1. 前端开发系列061-网络篇之HTML页面渲染的基本过程

    本文描述了HTML页面渲染的基本(一般)过程,需要说明的是该文并不包含关于HTML解释器.CSS解释器.JavaScript引擎等相关部分内部的具体处理细节.该文旨在简单介绍网页从加载到被我们看到过程 ...

  2. iPaaS与ESB: 解密企业集成领域的两大利器差异

    随着信息化发展不断深入,企业在不同的阶段引入了不同的应用.系统和软件,每个系统都有着独立的信息,渐渐的出现"数据孤岛"的现象.在这样的现象下,不同的企业集成系统应运而生,iPaaS ...

  3. Streamlit 配置

    Streamlit可以通过project根目录或者entry point文件(hello.py)目录下的.streamlit/config.toml进行配置. [global] # 默认情况下,当用户 ...

  4. SciTech-BigDataAIML-ETL(Extract/Transform/Load): Airflow、Luigi、NiFi+Pandas 的 深度整合指南

    https://hot.dawoai.com/posts/2025/python-etl-practical-airflow-luigi-deep-integration-guide/ Python ...

  5. SciTech-Physics-Relativity:相对论: 正解"相对论" + "光速不变原理"+VS 声波、水波 的传播速度

    SciTech-Physics-Relativity:相对论: Relativity:相对论 Relativity:相对论 分 "广义相对论"和"狭义相对论". ...

  6. SciTech-Mathmatics-Probability+Statistics:Quantifing Uncertainty_统计数据分析:朱怀球PKU-3-Sampling Theory 统计抽样理论基础

    Statistics & Data Analysis - Zhu Huaiqiu, Peking University <统计与数据分析>, 朱怀球, 北京大学 7 Steps § ...

  7. [学习笔记] KMP算法——烤馍片(超详细)

    1. KMP简介 kmp算法,是一种线性字符串匹配(父子串为 root,子子串为 s),由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此人们称它为KMP算法. 2. ...

  8. 开发板、windows、虚拟机(Ubuntu)三者互连的几种方式

    写在前面 虚拟机与Windows连接的方式 桥接模式:相当于让虚拟机与win处于平级关系,我们的路由器需要分别给win和ubuntu分配ip地址,Ubuntu与win在同一段网络 NAT模式:ubun ...

  9. 深入浅出--从零开始建设k8s监控之thanos(六)

    前言 书接上文,目前环境已经做好了水平拆分,是这个样子的 本文使用thanos对这些prometheus进行数据汇聚,并且详细讨论一下thanos 环境准备 组件 版本 操作系统 Ubuntu 22. ...

  10. 视觉小说 文字游戏引擎 ink 可配合Unity

    ink 是 inkle 发明的标记式语言,专门用在编写互动叙事游戏中,是制作文字游戏和游戏叙事的利器.使用了 ink 语言来叙事的游戏有比较知名的<80 天(80 Days)>等. 使用i ...