图文详解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


猜你喜欢
- B站原视频爬取,我就不多说直接上代码。直接运行就好。B站是把视频和音频分开。要把2个合并起来使用。这个需要分析才能看出来。然后就是登陆这块是
- 一、成员 1.1 变量实例变量,属于对象,每个对象中各自维护自己的数据。类变量,属于类,可以被所有对象共享,一般用于给对象提供公共
- 简单的合并,本例是横向合并,纵向合并可以自行调整。import xlrd import xlwtimport shutil from xlu
- 废话不多说,直接看问题,使用过 Python 中的标准库 zipfile 解压过 zip&
- 为什么传输几千个表的数据时向导会失败?当前的向导体系结构会创建一个 DTS 软件包数据流以传输数据。但如果要处理几千个表,则会遇到可伸缩性限
- 学习 Python 使程序员能够专注于解决问题,而不是专注于语法,其丰富的库赋予它完成伟大任务所需的力量。1. IDLE使得在 Python
- 本文实例讲述了Python2与Python3的区别。分享给大家供大家参考,具体如下:python2与python3的区别1、性能2、编码格式
- 初步介绍 当然,我知道现在有成千上万个关于 用CSS处理圆角 的教程,但不管怎么说,我仍然想把这篇文章展示给您。也希望您会发现这篇文章会非常
- SQL Server 2005的新功能为动态管理对象,它们是在指定时间返回某个数据库实例的特殊状态信息的数据库视图或函数。这些对象允许数据库
- 利用Python处理数据时,处理完成后输出结果为二维的列表,如果我们想把这个列表输出到Excel中形成格式化的数据,其实和输出到TXT文件大
- 由于要学习搭建服务器和数据库,所以最近开始自学sql语言了,至于写数据库就用比较基础的Mysql数据库了,虽然Mysql已经被互联网公司所淘
- 针对之前win10下安装mysql的笔记进行了总结,分享给大家。1. 解压mysql-5.7.11-winx64.zip 到某文件夹, 如C
- 在正式的生产环境中,我们常常会需要监控服务器的状态,以保证公司整个业务的正常运转,常常我们会用到像nagios、zabbix这类工具进行实时
- 这篇文章主要介绍了Python pygame绘制文字制作滚动文字过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 前言今天无意中发现在python中的一个多重赋值的小问题,自己一开始是比较简单化的理解了这个多重赋值操作的概念,所以导致在一道实现斐波那契数
- 使用ASP处理XSLT转换XML比较简单,思路如下:创建一个XSLTemplate的对象,再创建一个XMLDOM对象,然后在家Xml文件和X
- 最近经常需要出一些临时性的报表,于是就用python 的smtplib 和email 两模块写了个小程序,当数据处理完后通过邮箱把报表文件从
- 简介 本次项目登录注册验证是对之前学习知识点的加深学习,这次项目的练习的知识点有函数、判断语句、循环语句、文件操作等。项目流程 运行代码之后
- 我在网上找到了一篇文章,简直堪称神器。刚开始用brew search mysql ...能找到,按照提示一步一步安装,结果到最后就是启动不起
- 本文模仿实现数据库访问的通用类,代码清晰,而且很实用,包括了对数据库的所有的常用的操作。 /// <summary>