python自定义库的打包和安装

要将自定义库安装到python的三方包地址site-packages中,除了可以直接的复制之外,更为合理科学的方法是通过build和install的方式进行。因为直接复制仅仅作为一种临时的简单的方法,而且只能针对源码进行,也不好进行科学管理,相对的tricky一些,后者才是更为科学合理的工作流。

通过打包的方式进行,其需要先将原始的自定义库进行build,生成wheel文件或者压缩后的源码文件,然后通过pip直接安装即可。当然这里对库进行打包,需要依赖专门的工具,本文使用的是相对简单的flit工具。

安装flit

首先如果环境中没有flit,那么需要先安装,其是一个python的三方库,直接pip install flit即可。

初始化

在build之前,需要先对需要打包的库文件进行初始化,以生成描述库的meta data文件,后续的build依赖于这个文件。具体的方式就是在自定义库的文件夹所在的路径下方运行flit init即可,然后flit会通过交互式的命令行窗口让你补充完一些必要的信息,之后就会在当前目录下生成一个pyproject.toml文件,以及LICENSE许可文件。

这个时候就需要注意,flit对自定义库所依赖的其他三方库并不会自动感知,因此需要手动添加,直接在pyproject.toml中添加dependencies项即可,如下图所示,haha自定义库依赖numpy,则手动添加依赖项,如果没有指定版本,则安装的时候会安装最新版。如果没有添加依赖项,那么后续安装的时候,虽然可以成功安装项目库,但是并不会安装其依赖项,如果相应的python环境中原本就没有相应的依赖库,会导致安装后的自定义库无法正常运行。

build

初始化之后,再通过flit build即可打包,执行完该命令之后,默认会在当前路径下生成dist文件夹,里面会有源码打包的tar文件和wheel文件,这两种文件其实只需要其中之一就可,两者的区别在于源码打包文件往往针对需要本地编译的项目,比如自定义库中包含了c扩展,依赖于硬件,需要本地编译,那么就需要对源码打包,然后安装的之后再进行本地编译安装;wheel文件一般就是纯python项目,其直接build成平台独立的wheel文件,安装的时候更为高效简单。filt默认会同时生成这两种文件。

build之后,生成的文件就可以直接面向pip了,当然如果想把build之后的文件上传到pypi,那么可以通过flit publish实现,这个时候该库就会面向全网了,如果不需要publish到pypi,那么就可以直接进行本地安装了。

安装

build生成的wheel文件和tar文件,都可以通过pip直接安装。具体地,通过pip install name --find-links=your_wheel_tar_path -i https://pypi.tuna.tsinghua.edu.cn/simple安装即可,当然后面的-i https://pypi.tuna.tsinghua.edu.cn/simple是将默认的pypi服务地址改为国内清华镜像地址,避免网络原因造成其他依赖库的安装缓慢或者网络异常。

这里build生成的wheel文件或者tar文件可以分享给别人,让别人通过这种方式安装你的库,如果不想直接分享源码,可以把这个wheel文件发给别人(当然如果愿意,别人也有办法解析出源码),然后通过这种方式安装。这里需要说明的一点是,如果是本地安装,可以省去build过程,直接初始化之后,通过pip install your_project_path -i https://pypi.tuna.tsinghua.edu.cn/simple也可以直接安装,pip会识别路径下的pyproject.toml文件,安装相应的库和依赖项。

下载

有时候需要在其他机器上离线安装,那么除了自定义库自身的wheel或者tar文件之外,还需下载所有的依赖库,这个时候,可以通过pip download your_project_path -d your_project_path/dist -i https://pypi.tuna.tsinghua.edu.cn/simple命令,将依赖的所有库下载到项目打包文件一起,此时dist文件夹下的文件就可以满足其他机器的离线安装了,只需要在pip安装时,指定--find-links的路径即可。

相关推荐
骑士雄师2 分钟前
Java 泛型中级面试题及答案
java·开发语言·面试
biter down1 小时前
C 语言11:输入方法全解析
c语言·开发语言
小宁爱Python1 小时前
从零搭建 RAG 智能问答系统3:聊天信息持久化和登录注册
python
天才少女爱迪生2 小时前
LLVM(Low Level Virtual Machine)介绍
python·数据挖掘
碳酸的唐6 小时前
A* 工程实践全指南:从启发式设计到可视化与性能优化
python·神经网络
执尺量北斗8 小时前
[特殊字符] 基于 Qt + OpenGL 实现的入门级打砖块游戏
开发语言·qt·游戏
夏子曦8 小时前
C#内存管理深度解析:从栈堆原理到高性能编程实践
开发语言·c#
倔强青铜三9 小时前
苦练Python第64天:从零掌握多线程,threading模块全面指南
人工智能·python·面试
Q264336502310 小时前
【有源码】基于Hadoop生态的大数据共享单车数据分析与可视化平台-基于Python与大数据的共享单车多维度数据分析可视化系统
大数据·hadoop·python·机器学习·数据分析·spark·毕业设计