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

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

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


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


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


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


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


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


1.png


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


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


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


2.png


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


3.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'))


运行效果如下图所示:


4.png


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
8天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
51 33
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
146 67
|
2天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
3天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
18 3
|
7天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
21 2
|
1月前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
50 18
|
26天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
52 8
|
1月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
279 7
|
1月前
|
Python
Python中的函数
Python中的函数
45 8
|
2月前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####
下一篇
开通oss服务