百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python自定义模块的导入方法(python中自定义模块的导入方法)

off999 2024-10-02 18:41 24 浏览 0 评论

在程序开发过程中,遇到代码比较多时,为了便于维护和阅读,我们一般会把代码按照功能和相关性分别放到多个文件里。另外有些类或函数是用在多个项目中的,为了减少重复编码和便于集中维护,也会把这些代码单独存放到一个文件中。

Python引入了模块和包来管理更多的代码,.py文件就是一个模块 (module),包含一到多个模块的目录则被称为包 (package)。普通目录和包目录的区别在于包目录必须包含一个文件名为__init__.py的模块,此文件可以为空,也可以包含代码,模块的名称为目录名。

模块是一组Python代码的集合,可以调用其他模块,也可以被其他模块调用。模块名要遵循Python变量命名规范,不使用中文、特殊字符,供其他模块调用的模块不要和系统内置的模块名冲突,否则会将系统自带的模块屏蔽。

在项目中导入自定义模块一般分为三种情况:程序导入同级目录下的模块,程序导入子目录下的模块,程序导入其他目录下的模块(包括导入父目录下的模块)。

导入同级目录下的模块

在上图中,weibo.py用到了标号2处utils模块中的函数extend_date,我们可以导入整个模块,也可以导入模块的部分函数(函数名之间用逗号分隔)。两者的区别在于导入后的函数调用,前者函数名需要包含模块名,后者直接使用函数名。模块的导入和函数调用可以参考下面的实例。

导入整个模块

import utils

date = utils.extend_date('5分钟前')
print(date)     # 输出时间戳

导入模块的部分函数

from utils import extend_date

date = extend_date('5分钟前')
print(date)     # 输出时间戳

导入子目录下的模块

在上图中,weibo.py用到了标号1处utils模块中的函数extend_date,下面以导入模块部分函数为例来说明。

from libs.utils import extend_date

date = extend_date('5分钟前')
print(date)     # 输出时间戳

在这种情况下,经大器测试,libs目录下的__init__.py文件不是必要的,不会影响utils模块的导入。

导入任意目录下的模块

Python导入包时默认是从sys.path中搜索的。导入其他目录的方法有两种:在sys.path添加模块路径和创建.pth文件。两者都是在sys.path中添加路径,区别是前者是临时添加路径下的模块,只在当前的模块中导入有效,后者是添加路径为默认路径,在任意模块都可以导入路径下的模块。大器推荐用创建.pth文件的方法,只需设置一次路径,便可以在任意模块直接导入路径下的模块。

sys.path添加模块路径

先导入sys模块,然后通过sys.path.append(path)添加模块所在目录的路径。

ListVideo.py调用标号1处utils模块中的函数extend_date的示例如下。

import sys
sys.path.append(r'I:\work\work')
from libs.utils import extend_date

date = extend_date('5分钟前')
print(date)     # 输出时间戳

创建.pth文件

打开Python安装目录下的site-packages目录,使用pip命令安装的第三方库便存放于此,python的安装路径根据安装时的选择可能会不一样。

D:\Program\Python\Python38\Lib\site-packages

site-packages目录下创建mylibs.pth文件,文件名可以取别的名称,文件的内容填写模块或包所在目录的路径。此文件是纯文本文件,可以填写多个路径,路径之间用回车分隔,可以用记事本、VS Code编辑器等文本编辑器打开编辑。

I:\work\work

文件创建后,Python会扫描.pth文件中填写的路径,导入目录下的模块。ListVideo.py调用标号1处utils模块中的函数extend_date的示例如下。

from libs.utils import extend_date

date = extend_date('5分钟前')
print(date)     # 输出时间戳

__init__.py文件

Python包由__init__.py文件、模块文件和子目录组成,__init__.py文件定义了包的属性和方法。如果子目录中也有__init__.py,那么它就是这个包的子包。当我们将包作为模块导入时,实际上导入了__init__.py文件。

__init__.py文件可以是空文件,也可以写包的初始化相关代码,或者定义__all__变量。__all__变量是一个列表,列举了这个包包含的子模块名称。在使用from libs import *时,会把列表中的模块全部导入,此时必须定义__all__变量才能调用包中模块的函数,其他情况则无须定义__all__变量。__all__变量的定义如下。

__all__ = ['abc', 'utils']

ListVideo.py调用标号1处utils模块中的函数extend_date的示例如下。注意函数前面依然需要指定模块名称。

from libs import *

date = utils.extend_date('5分钟前')
print(date)     # 输出时间戳

通常不建议用from libs import *这种形式,因为会导致代码可读性降低,并且当前模块中的名称有可能覆盖导入模块中的名称。 改进的方法是将*用当前所用到的类名或函数名称代替,多个名称之间用逗号隔开,也可以将多个名称放到元组中,以便于换行。


我是大器,正在建立自己的知识库,并将这些经验分享给你,请关注我,一起交流学习。


相关阅读:

用Python获取子目录或文件列表

Python pip包管理工具

相关推荐

Alist 玩家请进:一键部署全新分支 Openlist,看看香不香!

Openlist(其前身是鼎鼎大名的Alist)是一款功能强大的开源文件列表程序。它能像“万能钥匙”一样,解锁并聚合你散落在各处的云盘资源——无论是阿里云盘、百度网盘、GoogleDrive还是...

白嫖SSL证书还自动续签?这个开源工具让我告别手动部署

你还在手动部署SSL证书?你是不是也遇到过这些问题:每3个月续一次Let'sEncrypt证书,忘了就翻车;手动配置Nginx,重启服务,搞一次SSL得花一下午;付费证书太贵,...

Docker Compose:让多容器应用一键起飞

CDockerCompose:让多容器应用一键起飞"曾经我也是一个手动启动容器的少年,直到我的膝盖中了一箭。"——某位忘记--link参数的运维工程师引言:容器化的烦恼与...

申请免费的SSL证书,到期一键续签

大家好,我是小悟。最近帮朋友配置网站HTTPS时发现,还有人对宝塔面板的SSL证书功能还不太熟悉。其实宝塔早就内置了免费的Let'sEncrypt证书申请和一键续签功能,操作简单到连新手都能...

飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx

前面分享了两期TVGate:Q大的转发代理工具TVGate升级了,操作更便捷,增加了新的功能跨平台内网转发神器TVGate部署与使用初体验现在项目已经开源,并支持Docker部署,本文介绍如何通...

Docker Compose 编排实战:一键部署多容器应用!

当项目变得越来越复杂,一个服务已经无法满足需求时,你可能需要同时部署数据库、后端服务、前端网页、缓存组件……这时,如果还一个一个手动dockerrun,简直是灾难这就是DockerCompo...

深度测评:Vue、React 一键部署的神器 PinMe

不知道大家有没有这种崩溃瞬间:领导突然要看项目Demo,客户临时要体验新功能,自己写的小案例想发朋友圈;找运维?排期?还要走工单;自己买服务器?域名、SSL、Nginx、防火墙;本地起服务?断电、关...

超简单!一键启动多容器,解锁 Docker Compose 极速编排秘籍

想要用最简单的方式在本地复刻一套完整的微服务环境?只需一个docker-compose.yml文件,你就能一键拉起N个容器,自动组网、挂载存储、环境隔离,全程无痛!下面这份终极指南,教你如何用...

日志文件转运工具Filebeat笔记_日志转发工具

一、概述与简介Filebeat是一个日志文件转运工具,在服务器上以轻量级代理的形式安装客户端后,Filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并将来自...

K8s 日志高效查看神器,提升运维效率10倍!

通常情况下,在部署了K8S服务之后,为了更好地监控服务的运行情况,都会接入对应的日志系统来进行检测和分析,比如常见的Filebeat+ElasticSearch+Kibana这一套组合...

如何给网站添加 https_如何给网站添加证书

一、简介相信大家都知道https是更加安全的,特别是一些网站,有https的网站更能够让用户信任访问接下来以我的个人网站五岁小孩为例子,带大家一起从0到1配置网站https本次配置的...

10个Linux文件内容查看命令的实用示例

Linux文件内容查看命令30个实用示例详细介绍了10个Linux文件内容查看命令的30个实用示例,涵盖了从基本文本查看、分页浏览到二进制文件分析的各个方面。掌握这些命令帮助您:高效查看各种文本文件内...

第13章 工程化实践_第13章 工程化实践课

13.1ESLint+Prettier代码规范统一代码风格配置//.eslintrc.jsmodule.exports={root:true,env:{node...

龙建股份:工程项目中标_龙建股份有限公司招聘网

404NotFoundnginx/1.6.1【公告简述】2016年9月8日公告,公司于2016年9月6日收到苏丹共和国(简称“北苏丹”)喀土穆州基础设施与运输部公路、桥梁和排水公司出具的中标通知书...

福田汽车:获得政府补助_福田 补贴

404NotFoundnginx/1.6.1【公告简述】2016年9月1日公告,自2016年8月17日至今,公司共收到产业发展补助、支持资金等与收益相关的政府补助4笔,共计5429.08万元(不含...

取消回复欢迎 发表评论: