Hatch 现代化的项目管理、构建工具

文章目录

  • Hatch 现代化的项目管理、构建工具
    • 简介
    • 安装
    • 操作
      • 项目常用操作
      • 虚拟环境相关
    • 故障记录
      • https 和 ssl 报错
      • UnicodeDecodeError: 'utf-8' codec can't ...
    • 参考资料

Hatch 现代化的项目管理、构建工具

简介

  • 介绍
    • Hatch 是一个用于创建、构建和发布 Python 软件包的现代化命令行工具,旨在简化 Python 软件包的管理和发布过程。Hatch 提供了一组命令,使开发人员能够轻松地创建新的 Python 项目、管理依赖关系、构建软件包以及发布到 PyPI(Python 包索引)等功能。通过 Hatch,开发人员可以更加方便地进行 Python软件包的开发和分发。
    • 简单来说,Hatch 是 Python 项目的现代化管理、构建工具,类似于 Java 的 Maven
  • 相关地址
    • 官网 Hatch - Hatch
    • GitHub仓库 GitHub - pypa/hatch: Modern, extensible Python project management
  • Hatch 使用 pyproject.toml 文件配置项目

安装

  • 官方安装文档 https://hatch.pypa.io/latest/install/
  • 使用安装包安装
    • Installation - Hatch
  • 使用 PIP 安装(不推荐)
    • 安装$ pip install hatch
  • 官方建议可以用 pipx 安装 pipx,我使用的 pipx 安装
    • 安装 pipx :$ python -m pip install --user pipx
    • 安装 hatch :$ pipx install hatch
    • 部分计算机可能会出现环境变量相关的 WARNING,请手动配置一下环境的 PATH

操作

项目常用操作

  • 创建项目$ hatch new myproject
(base) PS D:\code\python> hatch new myproject
my-project
├── src
│   └── my_project
│       ├── __about__.py
│       └── __init__.py
├── tests
│   └── __init__.py
├── LICENSE.txt
├── README.md
└── pyproject.toml
(base) PS D:\code\python>
  • 构建(在项目根目录下,默认会去创建独立的虚拟环境进行构建)
    • $ hatch build
    • 第一次执行时,可能会报错,见故障记录
    • 构建完成后见项目下 dist 目录,会出现 .tar.gz 和 .whl 文件
  • 测试(在项目根目录下)
    • $ hatch test
  • 发布(在项目根目录下)
    • $ hatch publish

虚拟环境相关

  • 基本(在项目根目录下执行)
    • 查询当前虚拟环境 $ hatch env find
    • 显示可用的虚拟环境 $ hatch env show
    • 运行当前虚拟环境下的命令 $ hatch env run pip list
(my-project) PS D:\code\python\my-project> hatch env find
C:\Users\MyUser\AppData\Local\hatch\env\virtual\my-project\ESvNmHcr\my-project
(my-project) PS D:\code\python\my-project> hatch env showStandalone
┌─────────┬─────────┬──────────────┬──────────────────────────────────────────────────────┬─────────┐
│ Name    │ Type    │ Dependencies │ Environment variables                                │ Scripts │
├─────────┼─────────┼──────────────┼──────────────────────────────────────────────────────┼─────────┤
│ default │ virtual │              │ PIP_INDEX_URL=http://mirrors.aliyun.com/pypi/simple/ │         │
│         │         │              │ PIP_TRUSTED_HOST=mirrors.aliyun.com                  │         │
├─────────┼─────────┼──────────────┼──────────────────────────────────────────────────────┼─────────┤
│ types   │ virtual │ mypy>=1.0.0  │ PIP_INDEX_URL=http://mirrors.aliyun.com/pypi/simple/ │ check   │
│         │         │              │ PIP_TRUSTED_HOST=mirrors.aliyun.com                  │         │
└─────────┴─────────┴──────────────┴──────────────────────────────────────────────────────┴─────────┘
(my-project) PS D:\code\python\my-project> hatch env run pip list
Package         Version
--------------- -----------
numpy           1.26.4
pandas          2.2.2
pip             24.0
python-dateutil 2.9.0.post0
pytz            2024.1
setuptools      69.5.1
six             1.16.0
tzdata          2024.1
wheel           0.43.0
(my-project) PS D:\code\python\my-project>
  • 进入项目的 Python 虚拟环境(在项目根目录下)
    • $ hatch shell
    • 在此环境中执行 $ pip list ,可以查看已安装的依赖包
    • 查看当前的解释器地址 $ python -c "import sys;print(sys.executable)"
PS D:\code\python\my-project> hatch shell
You are about to enter a new shell, exit as you usually would e.g. by typing `exit` or pressing `ctrl+d`...
(my-project) PS D:\code\python\my-project> pip list
Package         Version
--------------- -----------
numpy           1.26.4
pandas          2.2.2
pip             24.0
python-dateutil 2.9.0.post0
pytz            2024.1
setuptools      69.5.1
six             1.16.0
tzdata          2024.1
wheel           0.43.0
(my-project) PS D:\code\python\my-project> python -c "import sys;print(sys.executable)"
C:\Users\MyUser\AppData\Local\hatch\env\virtual\my-project\ESvNmHcr\my-project\Scripts\python.exe
  • 注意:不要在进入虚拟环境的模式下执行 $ hatch build,见故障记录

故障记录

https 和 ssl 报错

  • 新安装好后,在项目下使用 $ hatch build 会报错(https 和 ssl 相关)
PS D:\code\python\my-project> hatch -v  build
──────────────────────────────────────────────────────── sdist ────────────────────────────────────────────────────────
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/hatchling/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/hatchling/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/hatchling/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/hatchling/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/hatchling/
Could not fetch URL https://pypi.org/simple/hatchling/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/hatchling/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
ERROR: Could not find a version that satisfies the requirement hatchling (from versions: none)
ERROR: No matching distribution found for hatchling
  • 解决方法
    • 打开项目下的 pyproject.toml 文件
    • 添加如下配置(使用阿里云的源)
# 配置 default 环境的环境变量
[tool.hatch.envs.default.env-vars]
PIP_INDEX_URL = "http://mirrors.aliyun.com/pypi/simple/"
PIP_TRUSTED_HOST = "mirrors.aliyun.com"
  • 构建成功示例如下
PS D:\code\python\my-project> hatch -v  build
──────────────────────────────────────────────────────── sdist ────────────────────────────────────────────────────────
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting hatchlingDownloading http://mirrors.aliyun.com/pypi/packages/5f/20/b890241570ac3ba6508febab3104eeb1acd7ffba1bd3447190f56151f1bc/hatchling-1.24.2-py3-none-any.whl (83 kB)---------------------------------------- 83.1/83.1 kB 467.1 kB/s eta 0:00:00
Collecting editables~=0.3Downloading http://mirrors.aliyun.com/pypi/packages/6b/be/0f2f4a5e8adc114a02b63d92bf8edbfa24db6fc602fca83c885af2479e0e/editables-0.5-py3-none-any.whl (5.1 kB)
Collecting packaging>=23.2 (from hatchling)Downloading http://mirrors.aliyun.com/pypi/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl (53 kB)---------------------------------------- 53.5/53.5 kB 554.5 kB/s eta 0:00:00
Collecting pathspec>=0.10.1 (from hatchling)Downloading http://mirrors.aliyun.com/pypi/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl (31 kB)
Collecting pluggy>=1.0.0 (from hatchling)Downloading http://mirrors.aliyun.com/pypi/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl (20 kB)
Collecting tomli>=1.2.2 (from hatchling)Downloading http://mirrors.aliyun.com/pypi/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting trove-classifiers (from hatchling)Downloading http://mirrors.aliyun.com/pypi/packages/00/87/c8ccf265dea5f96a1e930e69b97214255bbe284ca78e450aeaba7d021bdb/trove_classifiers-2024.5.22-py3-none-any.whl (13 kB)
Installing collected packages: trove-classifiers, tomli, pluggy, pathspec, packaging, editables, hatchling
Successfully installed editables-0.5 hatchling-1.24.2 packaging-24.0 pathspec-0.12.1 pluggy-1.5.0 tomli-2.0.1 trove-classifiers-2024.5.22
Building `sdist` version `standard`
dist\my_project-0.0.1.tar.gz
──────────────────────────────────────────────────────── wheel ────────────────────────────────────────────────────────
Building `wheel` version `standard`
dist\my_project-0.0.1-py3-none-any.whl
PS D:\code\python\my-project>

UnicodeDecodeError: ‘utf-8’ codec can’t …

  • 进入项目的 Python 虚拟环境后执行 $ hatch build,会报错,例如
(my-project) PS C:\Users\MyUser\Projects\python\my-project> hatch build
────────────────────────────────────────────────────── sdist ───────────────────────────────────────────────────────
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
省略中间内容 ...
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 186: invalid start byte
  • 解决方式
    • 退出虚拟环境 $ exit
    • 再执行 $ hatch build即可

参考资料

  • Introduction - Hatch
  • hatch,一个现代化 Python 管理工具-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-源码解说

归档 GitHub: MyBatis-源码解说 总说明 源码仓库: https://github.com/mybatis/mybatis-3克隆:git clone https://github.com/mybatis/mybatis-3.git切分支(tag):git checkout masterJDK: 17Mapper 测试在 org.apac…

钉钉二次开发-企业内部系统集成官方OA审批流程(三)

书接上回,本文主要分享 企业内部系统集成钉钉官方OA审批流程的步骤 的第二部分。 前端代码集成钉钉免登JSAPI: 前端通过corpid 获得钉钉临时访问码code,再通过临时访问码code调用此接口返回当前用户的姓名、userid、 钉钉用户id、 系统工号、 钉钉部门…

从0开发一个Chrome插件:核心功能开发——弹出页面

前言 这是《从0开发一个Chrome插件》系列的第十一篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必…

从0开发一个Chrome插件:内容脚本实战——用户访问任何网页时,在页面顶部插入一条通知信息

前言 这是《从0开发一个Chrome插件》系列的第十篇文章,本系列教你如何从0去开发一个Chrome插件,每篇文章都会好好打磨,写清楚我在开发过程遇到的问题,还有开发经验和技巧。 专栏: 从0开发一个Chrome插件:什么是Chrome插件?从0开发一个Chrome插件:开发Chrome插件的必要…

如何使用Python中的random模块生成随机数

在Python中,random模块提供了多种用于生成随机数的函数。以下是一些基本示例: 生成随机整数: 使用random.randint(a, b)函数生成一个介于a和b之间的随机整数(包括a和b)。 python复制代码 import random random_int …

50etf期权怎么开户?期权懂有几种方式?

今天带你了解50etf期权怎么开户?期权懂有几种方式?50ETF期权开户可以通过证券公司、期权交易平台或期权交易应用进行。投资者需填写开户申请表格,提供身份证明和其他资料,完成开户手续。 50etf期权怎么开户? 满足资金…

欢乐钓鱼大师辅助:哪家云手机自动钓鱼更好操作!

在探索《欢乐钓鱼大师》的世界时,我们不得不提到一个强大的游戏辅助工具——VMOS云手机。通过VMOS云手机,你可以轻松实现自动钓鱼,让游戏体验更加便捷高效。 什么是VMOS云手机? VMOS云手机是一款基于虚拟机技术的云端工具&#…

【每日一函数】uname 函数介绍及代码演示

Linux uname 函数介绍及代码演示 引言 Linux 系统中,uname 是一个常用的命令行工具,用于显示系统信息。然而,在编程过程中,我们有时需要在程序中获取这些信息,此时就可以使用 uname 函数。本文将对 uname 函数进行详…

ubuntu20.04中设置包含ros节点的文件自启动

若文件里包含了ros话题的发布和接收,那么设置自启动时,应该首先将roscore设置为自启动。 首先确保roscore有一个systemd服务文件。如果还没有,需要在/etc/systemd/system/下创建一个。例如,一个基本的roscore.service文件可能如下…

安徽代理记账公司的专业服务和创新理念

在当今竞争激烈的市场环境中,为了提升企业的运营效率,许多企业开始寻找专业的代理记账公司进行财务管理和记账,本文将介绍一家名为安徽代理记账公司的专业服务和创新理念。 安徽代理记账公司是一家专注于为企业提供全方位会计服务的公司&…

Java异步处理:不使用线程池实现异步任务

在现代应用程序中,异步处理是一项重要的技术,它允许程序在执行耗时操作时不会阻塞主线程。尽管线程池是管理和调度线程的常用工具,但有时我们可能需要其他方法来实现异步处理。本文将介绍在Java中如何不使用线程池来处理异步任务,并提供详细的代码示例和解释。 一、什么是…

SwiftUI中Mask修饰符的理解与使用

Mask是一种用于控制图形元素可见性的图形技术&#xff0c;使用给定视图的alpha通道掩码该视图。在SwiftUI中&#xff0c;它类似于创建一个只显示视图的特定部分的模板。 Mask修饰符的定义&#xff1a; func mask<Mask>(alignment: Alignment .center,ViewBuilder _ ma…

大屏可视化建设方案(word)

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.…

9.1 Go 接口的定义

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

算法训练营day03--203.移除链表元素+707.设计链表+206.反转链表

一、203.移除链表元素 题目链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/ 文章讲解&#xff1a;https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html 视频讲解&#xff1a;https://www.bilibili.com…

如何使用Java进行安全的网络通信

在当今日益数字化的世界中&#xff0c;网络通信的安全性成为了至关重要的议题。Java作为一种广泛使用的编程语言&#xff0c;提供了多种工具和库来实现安全的网络通信。下面&#xff0c;我将从技术难点、面试官关注点、回答吸引力和代码举例四个方面&#xff0c;详细阐述如何使…

Python报错:IndentationError: unexpected indent问题的解决办法及原因

解决Python报错&#xff1a;IndentationError: unexpected indent问题的解决办法及原因 Python是一种注重可读性的编程语言&#xff0c;它使用缩进来定义代码块。如果你遇到了IndentationError: unexpected indent的错误&#xff0c;这意味着Python解释器在代码中遇到了意外的缩…

腾讯元宝APP上线:国内大模型产品的新篇章

近日&#xff0c;腾讯元宝APP的正式上线标志着国内大模型产品领域又迎来了一位强有力的竞争者。随着人工智能技术的飞速发展&#xff0c;我们见证了越来越多的“全能”大模型AIGC产品涌现&#xff0c;它们以其卓越的性能和广泛的应用场景&#xff0c;逐渐渗透到我们生活的各个角…

阿里云(域名解析) certbot 证书配置

1、安装 certbot ubuntu 系统&#xff1a; sudo apt install certbot 2、申请certbot 域名证书&#xff0c;如申请二级域名aa.example.com 的ssl证书&#xff0c;同时需要让 bb.aa.example.com 也可以使用此证书 1、命令&#xff1a;sudo certbot certonly -d “域名” -d “…

使用亮数据代理IP爬取PubMed文章链接和邮箱地址

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…