开发者必看:Pip可编辑安装让你轻松定制和修改第三方库

引言

本文分享一种提高开发调试效率的 pip 使用技巧。

可编辑需求

我们在平时做 Python 开发的时候,经常会遇到下面的问题:

  • 想要开发一个第三方库,开发的时候为了验证效果,要不停地安装,测试效果,安装,测试效果。。。
  • 想要使用别人的第三方库,但是别人的第三方库有的时候有一些不满足我们需求的地方,但是我们又不方便对它进行更改,因为改动的是源代码文件夹,pycharm 会提示我们不能修改,哪怕强制修改之后也会忘记改了哪里。

如果对源代码文件夹进行修改会提示:

image-20241222174721041

针对以上的问题,其实我们的核心诉求就是对已经安装的三方库进行修改,并且保留修改记录以方便进行版本管理。

这个时候,我们可以使用 pip 的可编辑安装模式来解决这个问题。

可编辑安装

可编辑安装模式,字面意思就是安装后的文件是可编辑的。

只需要三行代码,例如我想以可编辑安装模式安装 requests 库,那么只需要这么操作:

1
2
3
git clone --depth=1 https://github.com/psf/requests.git
cd requests
pip install -e .

执行完以上操作,我们的目录应该是这样的:

1
2
3
4
5
6
❯ tree -L 1
.
├── demo.py
└── requests

2 directories, 1 file

demo.py 是我刚才新建的测试文件,以可编辑安装模式安装好以后,我们就可以随意修改 requests 文件夹中的文件内容了,这个时候的修改是实时生效的。

你可以理解为,这个时候的 requests 文件夹和实际 site-packages 文件夹中的 requests 库是实时同步的,你所有的修改都会同步的 site-packages 文件夹中,再也不用重新安装就能测试安装后的效果了。

测试效果

例如我想要对 requests 库的某个文件进行修改,然后使用 demo 文件测试效果。从下面的图片可以看到,我在初始化文件中添加了一行打印输出,只要是 import requests 库就会触发,并且左侧的 src 文件夹变成了源代码(颜色变了)文件夹了。

image-20241222181043535

运行 demo 脚本,可以看到,我们添加的打印语句已经被成功触发,并且正常的执行了我们的 get 请求。

image-20241222181320834

可编辑安装后,我们可以随意对 requests 库进行修改和调试,也可以添加我们需要的自定义功能。

自定义功能

例如我这里随便添加一个 demo 请求方式,之前只有 get,post等等请求,我这里新增一个方式,其实只是 get 请求的别名哈,我们来看一下如何实现。

首先我们要知道请求方式是在哪里定义的,requests 是在 api.py 这个文件中定义的,我们来修改这个文件。

image-20241222181903520

只需要在 api 文件中添加一个函数,函数名叫 demo 即可,函数内容和 get 请求是一样的就可以了。还有一个修改的地方,因为 requests 将所有可调用的函数都导出到了init 文件中,所有我们要在 init 文件中也导入我们新增的请求方式。

image-20241222182209032

我们到此成功添加了一个 get 请求的别名到本地的 requests 库中。

现在来写代码测试一下,看下效果:

image-20241222182254968

可以看到,demo 请求成功的被执行了,执行的其实还是 get 请求,但是我们成功的添加了一个 get 请求的别名。

保存代码

我们刚才对 requests 库的代码进行了修改,并且在本地进行了验证,那么如何保存我们修改后的代码方便后面在其他项目中进行使用呢?因为我们对 requests 进行了个性化的修改,requests 官方肯定不会合并我们这么随意的 PR 的,所以我们只能自己来维护修改后的仓库。

而且方便起见,将修改后的 requests 发布到 pypi 好像也没什么必要,因为它可能只有我们会使用,发布到 pypi 有点麻烦而且浪费公共资源。。所以我们可以将修改后的代码上传到 Github 上,后续需要使用到这个库的话,我们只需要使用上篇文章中提到的使用 pip 直接安装 Github 上的第三方库的方法即可。

对了,如果是内网的代码和修改,别忘了发布到内网的 gitlab 或者其他版本管理工具中,不要发布到 Github 上,会被追责的!!!

总结

使用 pip 的可编辑安装模式可以方便我们调试或者添加自定义的功能到开源版本的第三方库中,并且开发者在开发新的第三方库的过程中快速开发和迭代代码而无需重新安装打包,这对于提供开发效率和降低开发成本是非常有帮助的。

本文章首发于个人博客 LLLibra146’s blog
本文作者:LLLibra146
更多文章请关注:qrcode
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
本文链接
https://blog.d77.xyz/archives/202839f7.html