6

一日一技:多个Python项目怎么调用我自己的工具函数?

 2 years ago
source link: https://www.kingname.info/2022/04/13/use-pth/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一日一技:多个Python项目怎么调用我自己的工具函数?

发表于 2022-04-13

|

分类于 Python

|

评论数: 0

在多年写代码的过程中,我总结了不少常用的工具函数。这些工具函数有的能够实现快速重试网络请求,有的可以把任意格式的时间转成标准格式,还有的可以自动生成正则表达式。

我把这些工具函数分别放到多个.py文件中。然后把这些.py文件放在一个叫做my_awesome_util的文件夹中。

由于我没有把这些代码上传到Pypi或者Github,因此我每次在新的项目中要使用时,都要把my_awesome_util文件夹复制到新的项目中,非常麻烦,而且会形成大量的重复代码。

有没有什么办法,能让新开的项目直接就能导入这些工具函数呢?就像导入官方模块import time一样,如果我要使用时间相关的工具函数,我只需要import time_util就可以了。

首先要排除的方法,就是手动在代码里面,通过sys.path添加文件夹。因为这个方法需要在每个项目的入口文件中增加两行代码,无法做到全自动

今天的方法,是在Python的site-packages文件夹中做文章。相信很多同学都知道,任何放到site-packages文件夹里面的.py文件或者文件夹,都可以在Python中直接导入:

20220411175822.png

看到这里,肯定有同学要问,那是不是把my_awesome_util文件夹整个复制到site-packages文件夹中呢?

当然不是的。因为我的工具包里面的代码是在持续演进的,我会经常更新里面的代码,放到site-packages里面以后,代码修改起来很不方便。

我们要用到的,是Python的一个特性,叫做.pth文件。在site-packages文件夹中,任意创建一个.pth文件。文件名可以随便取,只要不跟已有的模块冲突就可以了。例如叫做xxxx.pth。这个文件里面只有一行,就是my_awesome_util文件夹的绝对路径。例如:

20220411180625.png

现在,我在任何一个文件夹中启动Python,直接就可以导入my_awesome_util文件夹中的任何.py文件:

20220411180531.png

.pth文件可以有很多行,每行一个文件夹的绝对路径,就可以让Python同时导入这些文件夹里面的所有.py文件。

有时候,我们的电脑上有多个虚拟环境。A环境有pandas,没有pymongo;B环境有pymongo,但没有pandas。现在我在B环境里面要写一段代码,既需要pandas,又需要pymongo怎么办呢?如果不想重新安装,我可以把A环境的site-packages文件夹的绝对路径,写入到一个.pth文件中,然后把这个文件存放到B环境的site-packages文件夹中。这样,我就可以在B环境里面直接使用A环境中的所有第三方库了。

有同学会问,怎么知道site-packages文件夹在哪里呢?其实只需要执行下面两行代码就能查询到:

>>> import sysconfig
>>> print(sysconfig.get_path('purelib'))

运行效果如下图所示:

20220411181203.png

谢乾坤 | Kingname wechat
第一时间获取最新文章更新,请订阅我的微信公众号:未闻Code

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK