news 2026/4/16 19:59:08

打造自己的Python工具集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打造自己的Python工具集

最近在使用Jep(Java Embedded Python)做一个Java调用Python代码的案例(一种在网页上编写并支持代码即时运行)时发现一个问题。由于每个人都在页面上编写属于自己的python脚本,而这些python脚本可能会使用一些诸如计算时间差、日期格式转换等代码,而这些代码都是由脚本人员写在同一个脚本下的,如果A有两个脚本需要计算时间差,那么他就需要在两个脚本中写两个计算时间差的脚本(当然,他可以选择复制!)于是当某天运维人员检查脚本时,发现了大量的冗余代码片段(有的是功能相同的代码实现不同的,有的甚至是代码存在缺陷,只是刚好在这个脚本下不会触发),同时脚本人员也有抱怨,同样的功能片段不能复用,而需要他们来回复制。因此寻找统一的工具集就成了比较紧急的事情。

Jep介绍

在Java中我们时常使用一些非常实用的类库:如guava、common-langs3等!而在python这边,似乎是科学计算的类库用的比较多,如:numpy、panda等,找了半天也就pyhutool比较接近我的需求,但是pyhutool还是太杂了,里面还是有一堆脚本小子们用不到的东西,因此还是决定自己做一个。

在Java中自定义工具集,是通过编写代码并打成jar的方式(或发布到中央仓库)进行分发的,而在Python里也有一个Pypi的仓库可以使用,当然我们不讲如何使用pypi,我们主要讲的是如何将我们写的python代码打成 "jar" (注意引号)来安装到本地从而可以进行使用。

同样的在制作python的工具集时,首先需要创建一个新项目,整体结构如下:

sdk-demo ├─ setup.py └─ kanyun_tools ├─ __init__.py ├─ str │ ├─ str_utils.py │ └─ __init__.py └─ date ├─ date_utils.py └─ __init__.py

可以看到 sdk-demo是我们整个项目的名称,也就是上传到github上的名称。

kanyun_tools则是python的包名称,可以看到下面有__init__.py文件。

str/date则是kanyun_tools的子包,它表示了kanyun_tools下包含了两个子包。分别表示两种类型的工具:字符串和时间。

这里有两个小提醒:

1.在python中包名最好不要使用中划线,可以使用下划线(这块在浪费了很长时间😭)

2.在python中一个py文件称为一个模块

整个项目结构中的所有__init__.py内容均为空。

重点关注项目路径下的setup.py文件:

from setuptools import setup, find_packages setup( # 这个名字应与主包的名字一致 name="kanyun_tools", version="1.0", author="看云", description="Learn to Pack Python Module", # 项目主页 url="https://github.com/chenwuwen", # 你要安装的包,通过 setuptools.find_packages 找到当前目录下有哪些包 packages=find_packages(), # 表明当前模块依赖哪些包,若环境中没有,则会从pypi中下载安装 install_requires=[], # 安装环境的限制,安装需要python环境大于等3.10 python_requires='>=3.10' )

以上文件只是简单的写了写,更多内容见:

https://zhuanlan.zhihu.com/p/276461821

https://geek-blogs.com/blog/python-setuppy/

https://developer.aliyun.com/article/1604491

讲完了setup.py的编写,包的创建工作也就结束了,接下来开始打包了。

在打包之前,你可能想先在本地试一下这个包是否好用,那么可以cd到项目目录:

执行命令:

# 安装 Python 包的可编辑版本及其可选依赖项,通过符号链接安装,源码修改直接生效(这样如果包有问题,可以直接修改源码,即时生效) pip install -e .

执行完上述命令后,就可以在本机的其他项目中引用你的包了,引用的包名也就是setup.py中定义的名称。

在引用前可以使用pip list命令查看在虚拟环境下包是否已被安装:

C:\Users\kanyun>pip list Package Version --------------- ----------- e 1.4.5 jedi 0.19.2 json5 0.12.1 kanyun-tools 1.0 #注意这个名字 orjson 3.11.5 parso 0.8.5 pip 23.2.1 python-dateutil 2.9.0.post0 setuptools 65.5.0 simplejson 3.20.2 six 1.17.0 ujson 5.11.0 wheel 0.45.1

可以看到已经找到了kanyun-tools这个依赖了,需要注意的是,这个包安装到虚拟环境中显示的是中划线,而在python代码引入时,使用的是下划线 kanyun_tools

还有三个提醒:

1.安装包的虚拟环境与使用端的虚拟环境是否是同一个

2.如果使用的是pycharm可能需要重启一下,否则使用端可能引用不到,当然最好使用python自带的命令行验证。

3.如果在编辑安装的模式下,修改了包的源码,而在测试中发现修改后的源码没有生效,则需要重启下测试方的shell,再次验证。

验证:

Python 3.11.6 (tags/v3.11.6:8b6ee5b, Oct 2 2023, 14:57:12) [MSC v.1935 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> from kanyun_tools.date import date_utils >>> date_utils.test() 112 >>> from kanyun_tools.str import str_utils >>> str_utils.test() 334 >>>

可以看到已经我们自定义的python包已经成功安装,并运行成功。

接下来我们真正要做的就是将我们测试验证好的包进行打包了,也就是打我们的"jar"包了,并分享给别人使用。

# 将包打成源码包(源码包安装的过程,是先解压,再编译,最后才安装,所以它是跨平台的,由于每次安装都要进行编译,相对二进包安装方式来说安装速度较慢) python setup.py sdist

打包完成后,会在项目目录下生成dist目录,目录下产生tar.gz文件,当包要传递给其他平台时,可以使用源码包进行安装。

#安装源码包(需要保证包中所需的依赖在平台上存在) pip install *.tar.gz

二进制打包方式:

# 二进制包的安装过程省去了编译的过程,直接进行解压安装,所以安装速度较源码包来说更快,由于不同平台的编译出来的包无法通用,所以在发布时,需事先编译好多个平台的包 python .\setup.py bdist_wheel

执行上述命令可以看到在dist目录下whl文件,这也是常见的python依赖二进制文件,需要注意的是,在执行这个命令前,需要打包环境存在wheel依赖,如果没有则需要安装(pip install wheel)。

#使用如下命令查看当前环境的python依赖 pip list

将生成whl分发给别人,其他人就可以使用这个包了。

当然了如果这个包只会自己在本机使用,也可以直接在包的项目目录执行如下命令即可:

#将包文件复制到Python环境,修改源码需重新安装才能生效。 pip install .
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 7:44:31

收藏!有哪些医药行业RPA案例?全场景实战解析,看完就懂

“一款新药从实验室到药房,平均要花10年时间、烧20亿美元,成功率却不足10%”——这组流传在医药圈的数字,道出了行业的痛点。更让人焦虑的是,研发之外,生产车间里3人5天才能审核完的批记录、供应链上上千家经销商的混乱…

作者头像 李华
网站建设 2026/4/16 9:04:35

适合初学者的Agent工具有哪些?从入门到上手的完整避坑指南

打开招聘软件,“熟悉AI Agent工具优先”的标注越来越常见;刷技术社区,“多智能体协作”“自主任务规划”的讨论热度居高不下。作为一个去年还对“Agent”一词一头雾水的职场人,我太懂初学者的迷茫——明明知道这是未来的职场必备技…

作者头像 李华
网站建设 2026/4/16 9:19:39

国内知名AI Agent智能体全解析:从技术原理到顶尖产品,一篇读懂

凌晨三点的财务办公室,实习生小李还在对着五六个系统反复复制粘贴数据;另一边,市场部张经理盯着满屏的用户反馈,愁于无法快速提炼出有效需求——这样的场景,是不是在你的职场中频繁上演?但如果告诉你&#…

作者头像 李华
网站建设 2026/4/16 9:24:13

测试老鸟经验,性能测试-性能结果分析详情,看这篇就够了...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 分析原则&#xf…

作者头像 李华
网站建设 2026/4/16 9:24:07

语言模型在多智能体协作任务中的群体智慧与集体决策优化研究

语言模型在多智能体协作任务中的群体智慧与集体决策优化研究 关键词:语言模型、多智能体协作、群体智慧、集体决策优化、人工智能 摘要:本文聚焦于语言模型在多智能体协作任务中的应用,深入探讨了群体智慧的形成机制以及集体决策优化的方法。首先介绍了研究的背景、目的和相…

作者头像 李华
网站建设 2026/4/16 10:59:05

C++安全编程

比较权威的漏洞统计网站: CWE 官网 https://cwe.mitre.org/index.htmlhttps://cwe.mitre.org/data/definitions/1003.htmlhttps://www.sans.org/top25-software-errors CVE 官网 https://www.cve.org/CVERecord?idCVE-2005-0369 LWG https://cplusplus.github.io/…

作者头像 李华