当前位置: 首页 > 科技观察

多个Python项目如何调用我自己的实用函数?

时间:2023-03-13 23:55:52 科技观察

在多年写代码的过程中,总结了很多常用的实用函数。这些实用函数有的可以快速重试网络请求,有的可以将任意格式的时间转换成标准格式,有的可以自动生成正则表达式。我将这些实用函数放入多个.py文件中。然后将这些.py文件放在名为my_awesome_util的文件夹中。由于我没有把这些代码上传到Pypi或者Github上,所以每次要在新项目中使用它们时,都必须将my_awesome_util文件夹复制到新项目中,这样很麻烦,而且会形成很多重复代码。有什么方法可以直接将这些实用函数导入到新打开的项目中吗?就像导入官方模块importtime一样,如果我想使用时间相关的实用函数,只需要importtime_util即可。第一种排除方法是在代码中通过sys.path手动添加文件夹。因为这种方式需要在每个项目的入口文件中添加两行代码,所以不能完全自动化。今天的方法是在Python的site-packages文件夹下做文章。相信很多同学都知道,任何放在site-packages文件夹下的.py文件或文件夹,在Python中都可以直接导入:看到这里,肯定有同学会问要不要把整个my_awesome_util文件夹复制到site-packages文件夹下?当然不是。因为我的工具包里的代码在不断演进,所以我会经常更新里面的代码。放入site-packages后,修改代码非常不方便。我们将要使用的是Python的一个功能,称为.pth文件。在site-packages文件夹中,任意创建一个.pth文件。文件名可以随意取,只要不和已有模块冲突即可。例如称为xxxx.pth。这个文件只有一行,是my_awesome_util文件夹的绝对路径。例如:现在,如果我在任何文件夹中启动Python,我可以直接导入my_awesome_util文件夹中的任何.py文件:.pth文件可以有很多行,每行都有一个文件夹的绝对路径,这样Python就可以同时导入这些文件夹中的所有.py文件。有时,我们的计算机上有多个虚拟环境。环境A有pandas但没有pymongo;环境B有pymongo但没有pandas。现在想在B环境下写一段代码,pandas和pymongo都需要怎么办?如果不想重装,可以把A环境的site-packages文件夹的绝对路径写成一个.pth文件,然后把这个文件存放到B环境的site-packages文件夹中。这样我就可以直接在B环境下使用A环境下的所有第三方库了。有同学会问,怎么知道site-packages文件夹在哪呢?其实只需要执行下面两行代码即可查询:>>>importsysconfig>>>print(sysconfig.get_path('purelib'))运行效果如下图所示: