当前位置: 首页 > news >正文

Python项目打包

Python项目如何打包?

本指南总结了Python项目打包的最佳实践,主要涉及代码的打包和分发,以及环境和依赖的管理。

0. 一般项目清单

  • 源代码(可使用git托管)
  • 数据包(可使用DVC托管)
  • Docker环境镜像(可使用docker hub托管)

1. 代码打包

  • 使用 setuptools: 对于 Python 代码,使用 setuptools 创建一个 setup.py或pyproject.toml 文件,它描述了你的项目及其依赖。这允许其他人使用 pip install 来安装你的项目。我们以toml为例,展现一个基本的启动文件:(关于toml文件的更多解释可参考基于pyproject.toml的包管理(setuptools))
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"[project]
name = "apss"
version = "0.3.0"
description = "一种基于神经网络和启发式策略的深度学习模型分布式训练切分(3D parallelism)快速策略搜索算法"
readme = "README.md"
requires-python = ">=3.7"
classifiers = ["Programming Language :: Python :: 3",
]
dependencies = ["mindspore>=2.1.1", "tensorboard_logger","numpy", "tqdm",
][project.urls]
"Homepage" = "https://github.com/Cheny1m/APSS"[tool.setuptools.packages.find]
exclude = ["benchmark*","dist*","script*"][tool.wheel]
exclude = ["benchmark*","dist*","script*"]
  • 结构化你的项目: 确保你的项目有一个清晰的结构。通常包括源代码目录(如 src 或项目名称)、测试目录(tests或benchmark)、文档目录(docs)、自动化脚本目录(scripts)等。
  • 包含必要的文件: 除了源代码外,还应该包括 README.md(项目说明)、LICENSE(许可证)、.gitignore(Git 忽略规则)、config.json(可能的配置设置)、requirements.txt(可能的依赖提示)等文件。
# .gitignore例子# data & log & output
resource/# built binaries
dist# vscode
.vscode/# cache
*__pycache__
*.egg-info# pickle
*.pkl

2. 数据和资源

  • 分离大型数据: 如果项目包含大型数据文件或其他资源(如图像、模型等),最好不要直接包含在代码包中。可以将它们托管在网络上,如云存储(AWS S3、Google Cloud Storage 等),并在文档中提供下载链接或脚本。
  • 使用数据管理工具: 对于数据科学项目,考虑使用如 DVC(Data Version Control)之类的工具协同git来管理数据。

3. 环境和依赖管理

  • requirements.txt: 为项目创建一个 requirements.txt 文件,列出所有的依赖项,以便其他人可以使用 pip install -r requirements.txt 来安装依赖。
  • 使用虚拟环境: 推荐在开发时使用虚拟环境(如 venv 或 conda),这有助于隔离依赖并确保项目的可移植性。
  • 考虑使用 Docker: 对于更复杂的项目,尤其是涉及多个服务或特定系统依赖时,考虑使用 Docker 容器来打包你的应用及其环境。打包好的docker可以上传至docker hub供用户下载。

4. 文档和示例

  • 写明确的文档: 提供清晰、详细的文档,说明如何安装、配置和使用你的项目。如果可能,包括一些示例和教程。
  • 包含运行示例: 提供一些示例脚本或 Jupyter 笔记本,展示如何使用你的项目。

5. 测试和持续集成

  • 编写测试: 为你的代码编写单元测试和(如果适用)集成测试。
  • 设置 CI/CD: 考虑使用持续集成/持续部署(CI/CD)工具,如 GitHub Actions 或 Travis CI,来自动化测试和部署流程。

6. 发布到 PyPI

  • 发布包: 如果你的项目是一个库,并且你希望它被广泛使用,可以考虑将其发布到 PyPI 上,让人们可以通过 pip 直接安装。自动化脚本upload_pypi.sh:
rm -rf dist
python3 -m build
python3 -m twine upload dist/*

7. 版本控制

  • 使用 Git: 使用 Git 进行版本控制,并在 GitHub 或其他平台上托管代码,这不仅有助于团队协作,也方便分享和反馈。

8. 遵守开源协议

  • 选择合适的许可证: 如果你打算开源你的项目,选择一个合适的开源许可证(如 MIT、GPL、Apache 等)。

9.验证打包是否正确(创建新环境)

  • 使用Git拉取源代码和数据文件,使用docker下载好所需要的image。
  • 启动docker容器并将源代码和数据文件映射进容器。
  • pip安装项目(从源码构建 – 进入项目根目录后执行:pip install -e . ;如果上传到了pypi,可以使用pip install xxx)
  • 执行主脚本,看是否能够正常运行。
http://www.lryc.cn/news/247812.html

相关文章:

  • ASUS(华硕) B760M-AYW WIFI D4_解决wifi不能使用
  • Postgresql数据库运维统计信息
  • Python3基础
  • 【性能测试】服务器常用的性能指标总结,一文概全...
  • Vue学习笔记-Vuex基本使用
  • vue3中的customRef创建一个自定义的 ref对象
  • 动态规划学习——子序列问题
  • 使用 COPY 加速 PostgreSQL 批量插入
  • plotneuralnet和netron结合绘制模型架构图
  • MYSQL 中如何导出数据?
  • GPT-4惨遭削弱,偷懒摸鱼绝不多写一行代码,OpenAI已介入调查
  • CSS特效020:涌动的弹簧效果
  • 系列五、Spring整合MyBatis不忽略mapper接口同目录的xxxMapper.xml
  • 第454题.四数相加II
  • RabbitMQ消息队列
  • ModBus电表与RS485电表有哪些区别?
  • vue项目运行时,报错:ValidationError: webpack Dev Server Invalid Options
  • 书摘:C 嵌入式系统设计模式 02
  • 排序算法基本原理及实现1
  • Unity 轨道展示系统(DollyMotion)
  • 优维低代码实践:搜索功能
  • C# ReadOnlyRef Out
  • linux 服务 下 redis 安装和 启动
  • ECharts与Excel的结合实战
  • UDP的特点及应用场景
  • Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新
  • 【深度学习】卷积神经网络结构组成与解释
  • 从源码解析Containerd容器启动流程
  • 引迈-JNPF低代码项目技术栈介绍
  • 如何处理枚举类型(下)