图文详解Python如何导入自己编写的py文件
作者:正直的阿康 发布时间:2022-07-08 21:59:28
一. 想要实现的效果
新建文件夹将自编模块集中管理
可在其它py文件内import 自编模块,像import第三方库一样
二. 实现的方法
步骤1:将编号的模块 *.py放入文件夹,在我计算机中是:F:\OneDrive\PythonPrj\_myFunction
步骤2:新建用户/系统环境变量。
变量名:PYTHONPATH
变量值:文件夹路径
然后就可以实现想要的效果了,以下三种import方式均可。
这样做的原理是,Python解释器会去以下三个位置找import的模块:
当前文件所在目录
环境变量PYTHONPATH指定的目录
Python 默认的安装目录
Python中sys.path变量记录了解释器可Import模块的位置,如下图所示:
所以,可通过操作sys.path变量告诉解释器去哪里找模块,代码如下:
sys.path是个列表,这里用append将一个路径加到了列表中,然后此路径下的模块a就能成功导入了。这种方法多写了两行代码,不方便,所以只适合临时用一下。
三. 进阶用法
如果自编的模块多了,或者想给自编模块加上说明文档的话,还是希望将每个自编模块单独存放在一个文件夹,以便于管理维护。像这样:
然后在文件夹(如myPackage1)内存放自编模块。
这时想导入模块就要按照以下写法:
这是一级子文件夹的写法,更多级文件夹可以一直点(.)下去。当然,一般也就会用到一级子文件夹,二级几乎都不会使用。
四. 使用_init_.py控制导入某文件夹时执行的操作
上述的导入方式一次只能导入一个文件夹里的一个模块,如果想控制一次导入文件夹中的所有模块,而不用一个个用点号去点,我们需要用到_init_.py文件。
此文件需要与模块在同一目录中,如下图所示,Python中将拥有_init_.py文件的文件夹称为包。
每次import myPackage1时,_init.py会自动执行一次,所以也称为包初始化文件。利用这个特性,我们可以在此文件中写一些代码,用来控制导入文件夹myPackage1时的行为。像这样写这个初始化文件:
import sys# 将__init__.py文件所在目录加入Python搜索目录中,否则会提示找不到myModule1sys.path.append(__file__[:-12])import myModule1
然后,在其它py文件中导入myPackage1,因为_init_.py文件自动执行,myModule1文件会自动被导入。验证一下:
当然,即使在包初始化文件里写了import 某模块,还是可以用 import myPackage1.myModule 这样的方式来导入。包初始化文件不会对原本的导入方式有任何影响。
另一种写法,可以一次导入包中某模块中定义的函数和属性,像这样写_init_.py文件:
import sys
# 将__init__.py文件所在目录加入Python搜索目录中,否则会提示找不到myModule1
sys.path.append(__file__[:-12])
import myModule1
然后,在其它py文件导入时这么写:
可见,可以直接使用myModule1中的定义的函数了。
总结一下,导入模块的写法与_init_.py的写法需要保持一致,即要么都import 包名,要么都from 包名 import *,这样才可达到想要的效果。
我对Python理解还不够深入,仅将摸索出来的一些规律分享出来。
来源:https://blog.csdn.net/weixin_42837669/article/details/121445910
猜你喜欢
- 个人总结了在开发css框架中的一点经验,献丑了。希望大家的讨论能使我们共同进步。:)1、css框架中国的互联网行业已经发展了10年,浏览器也
- 前言昨天因为小程序功能要获取小程序程序码,看了微信文档爬了好多坑。(留一下记录以防后面被坑)操作因为我获取到了微信那里的图片的图片流一直不知
- 一、概述公司新购了一批PC,准备把几个性能较优的PC升级为数据库服务器,替换老旧的机器。公司有套POS终端软件,后台数据存储是 MySQL
- 本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码,供大家参考,具体内容如下整个链路:传感器采集端采集数据,边缘端上传数据
- 本文实例讲述了PHP实现的杨辉三角求解算法。分享给大家供大家参考,具体如下:♥ 前言对于 杨辉三角 是什么的问题,请参考百度百科的详细解释:
- js监听浏览器回车事件,可以支持ie6+,火狐,谷歌等浏览器。<html><head><script type
- 在 Python 中,函数可以通过以下语法定义和使用:def function_name(parameter1, parameter2, .
- 本文实例讲述了Python mutiprocessing多线程池pool操作。分享给大家供大家参考,具体如下:python — mutipr
- 方法一 <%dim total(7,3) total(1,0)="ASP之家"&n
- editTable.js 提供编辑表格当前行、添加一行、删除当前行的操作,其中可以设置参数,如:operatePos 用于设置放置操作的列,
- 今天群上面同志们在讨论css3内发光效果,自己也就研究一下,写了个效果出来,涉及css3投影,渐变,蒙版,伪类等知识点,现在写下设计思路,仅
- 直接给源代码了:$current_dir = 'E:/temp/';$dir = opendir($current_dir)
- 安装显示目录功能:pip install jupyter_contrib_nbextensions配置:安装完之后需要配置 nbextens
- 之前我们已经安装了lnmp的环境,现在让我们来安装phpmyadmin。跟前一样,yum默认的库里是没有phpmyadmin的,我们需要从e
- 1、简述asp的6个内置对象和其功能答案 : session ,server ,response,request,objectcontext
- 经常看到有新手问PHP有没有类似asp的left函数或right函数,实现截取某字符串左边或右边开始N个字符的函数。答案当然是有的。PHP中
- Pygame的Font文本和字体Pygame 通过pygame.font模块来创建一个字体对象,从而实现绘制文本的目的。该模块的常用方法如下
- 我是从去年初开始学习web标准的,两年下来也有些心得。最近跳槽了正好闲在家里,写一些出来和大家交流一下。1对于web标准和W3C XHTML
- 前言大家好!这个系列文章是W3CN 阿捷编写的。是一些制作过程中的心得和经验,希望对大家有点帮助。第一天开始制作符合标准的站点,第一件事情就
- 问题:关于如何生成随机记录(二)如何从指定表中随机抽取一定量的记录?sql server 中 select top 10 * fr