文章目录

  • 前言
  • 一、创建模块
  • 二、使用 import 语句导入模块
  • 三、使用 from...import 语句导入模块
  • 四、模块搜索目录
    • 1. 临时添加
    • 2. 增加 .pth 文件(推荐)
    • 3. 在 PYTHONPATH 环境变量中添加(推荐)

前言

  在Python中,自定义模块有两个作用:一个是规范代码,让代码更易于阅读,另一个是方便其他程序使用已经编写好的代码,提高开发效率。
  实现自定义模块主要分为两部分,一部分是创建模块,另一部分是导入模块。


一、创建模块

  创建模块时,可以将模块中相关的代码(变量定义和函数定义等)编写在一个单独的文件中,并且将该文件命名为 “模块名 + .py” 的形式。

注意:创建模块时,设置的模块名不能是Python自带的标准模块名称(比如time、math、os等等)。

  例如,创建一个专门用于下载图片的模块,命名为 download_picture.py,其中 download_picture 为模块名,.py 为扩展名。部分代码如下:

    def requests_image_url(self, image_url, image_title):'''5.对图片地址发起请求'''response_second = self.session.get(image_url).contentself.create_dir(response_second, image_title)def create_dir(self, response_second, image_title):'''6.创建文件夹'''if not os.path.exists(self.keyword):os.mkdir(self.keyword)self.save_images(response_second, image_title)def save_images(self, response_second, image_title):'''7.保存图片'''try:with open('{}/{}.jpg'.format(self.keyword, image_title), 'wb') as f:f.write(response_second)number = len(os.listdir(r'C:\Users\administrator0\Desktop\666\全网图片抓取\{}'.format(self.keyword)))print('第{}张图片{}下载成功'.format(number, image_title))except Exception as e:print('图片{}下载成功'.format(image_title))

注意:模块文件的扩展名必须是 “.py”


二、使用 import 语句导入模块

  创建模块后,就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码,这可以使用 import 语句实现。import 语句的基本语法格式如下:

import modulename [as alias]

  其中,modulename 为要导入模块的名称;[as alias] 为给模块起的别名,通过该别名也可以使用模块。
  下面将导入刚才创建的下载图片的模块 download_picture.py,并执行该模块中的方法。在模块文件 download_picture.py 的同级目录下创建一个名称为 1.py 的文件,在该文件中,导入模块 download_picture,并且执行该模块中 QwtpSpider() 类里面的 main() 函数,代码如下:

import download_picture  # 导入download_picture模块
picture = download_picture.QwtpSpider()  # 调用模块中的QwtpSpider()类
picture.main()  # 执行该类的main()方法

  执行上面的代码,显示如下所示结果。

说明在调用模块中的变量、函数或者类时,需要在变量名、函数名或者类名前添加 “模块名.” 作为前缀。例如,上面代码中的 download_picture.QwtpSpider,表示调用 download_picture 模块中的 QwtpSpider() 类。

  如果模块名比较长不容易记住,可以在导入模块时,使用 as 关键字为其设置一个别名,然后就可以通过这个别名来调用模块中的变量、函数和类等。例如,将上面导入模块的代码修改为以下内容。

import download_picture as d  # 导入download_picture模块并设置别名为d

  然后,在调用 download_picture 模块中的 QwtpSpider() 类时,可以使用下面的代码:

picture = d.QwtpSpider()  # 调用模块中的QwtpSpider()类

  使用 import 语句还可以一次导入多个模块,在导入多个模块时,模块名之间使用逗号 “,” 进行分隔。例如,分别创建了 download_picture、download_audio、download_video 3个模块文件。想要将这3个模块文件全部导入,可以使用下面的代码:

import download_picture, download_audio, download_video

三、使用 from…import 语句导入模块

  在使用 import 语句导入模块时,每执行一条 import 语句都会创建一个新的命名空间,并且在该命名空间中执行与 .py 文件相关的所有语句。在执行时,需要在具体的变量、函数和类名前加上 “模块名.” 前缀。如果不想在每次导入模块时都创建一个新的命名空间,而是将具体的定义导入到当前的命名空间中,这时可以使用 from…import 语句。使用 from…import 语句导入模块后,不需要再添加前缀,直接通过具体的变量、函数和类名等访问即可。

说明命名空间可以理解为记录对象名字和对象之间对应关系的空间。目前Python的命名空间大部分都是通过字典(dict)来实现的。其中,key 是标识符;value 是具体的对象。例如,key 是变量的名字,value 是变量的值。

  from…import 语法的语法格式如下:

from modelname import member

参数说明

  • modelname模块名称,区分字母大小写,需要和定义模块时设置的模块名称的大小写保持一致。
  • member用于指定要导入的变量、函数或者类等。可以同时导入多个定义(变量、函数或者类等),各个定义之间使用逗号 “,” 分隔。如果想导入全部定义,也可以使用通配符星号 “*” 代替。

  例如,通过下面的两条语句都可以从模块导入指定的定义。

from download_picture import QwtpSpider  # 导入模块中的QwtpSpider类
from download_picture import *  # 导入模块中的全部类,变量,函数

四、模块搜索目录

  当使用 import 语句导入模块时,默认情况下,会按照以下顺序进行查找模块路径。

  1. 在当前目录(即执行的Python脚本文件所在目录)下查找。
  2. 到PYTHONPATH(环境变量)下的每个目录中查找。
  3. 到Python的默认安装目录下查找。

  以上各个目录的具体位置保存在标准模块 sys 的 sys.path 属性中,sys 模块是与Python解释器交互的一个接口,可以通过以下代码输出模块查询的具体目录。

import sys
print(sys.path)

  执行以上代码,将显示如下图所示结果。

  从上图可以看出,在导入任何模块时,都是遵循上面的三个路径查找顺序来从本机上查找是否有该模块。先找当前Python文件所在的目录;如果没有,再从Python配置的环境变量目录下找;如果还没有,到Python的安装目录下找。如果全部都没有,那么在导入该模块时会报错如下图所示。

  这时,我们可以通过以下3种方式添加指定的目录到 sys.path 中。在添加之前我们先看看自定义的模块 download 里面具体功能代码,只是打印输出一句话,如下图所示。

1. 临时添加

  临时添加,即在导入模块的Python文件中添加。例如,我们要在当前 1.py 文件中导入 download 模块,首先需要找到 download.py 文件的所在路径 “C:\Users\administrator0\Desktop\tool”,将该路径添加到 sys.path 中,然后打印输出 sys.path 的值,代码及运行结果如下图所示。

  然后在该代码中导入 download 模块即可成功运行,如下图所示。

说明通过该方法添加的目录只在执行当前文件的窗口中有效,其他窗口无效,故称为临时添加。例如下图所示。

2. 增加 .pth 文件(推荐)

  在Python安装目录下的 Lib\site-packages 子目录中(例如,博主的Python安装在 E:\anaconda3 目录下,那么该路径为 E:\anaconda3\Lib\site-packages),如下图所示。

  打开该目录,在里面创建一个扩展名为 .pth 的文件,文件名任意。这里创建一个 a.pth 文件,在该文件中添加要导入模块所在的目录。例如,将模块目录 C:\Users\administrator0\Desktop\tool 添加到 a.pth 文件,然后保存即可。当然也可以先新建一个文本文档,在里面写入 C:\Users\administrator0\Desktop\tool,如下图所示。


  保存之后更改文件后缀名为 .pth,如下图所示。

注意:创建 .pth 文件后,需要重新打开要执行的导入模块的Python文件,否则新添加的目录不起作用

  接下来在任意文件中都可以导入 download 模块,并且正常使用。如下图所示。

说明通过该方法添加的目录只在当前版本的Python中有效,如果安装了其他版本的Python,并且解释器更换为其他版本,则该目录无效。

3. 在 PYTHONPATH 环境变量中添加(推荐)

  打开 “环境变量” 对话框(具体方法如下)。
  第一、同时按下 Win + R 键,打开运行框,在里面输入 sysdm.cpl,然后点击确定,如下图所示。

  第二、在系统属性框里点击 高级,然后点击 环境变量

  在对话框中查看是否有 PYTHONPATH 系统环境变量,如果没有则先创建一个,创建方法如下。
  先点击 新建,如下图所示。

  在弹出的新建系统变量对话框中输入变量名PYTHONPATH,输入变量值也就是自定义模块所在路径,我定义的模块 download 所在路径是 C:\Users\administrator0\Desktop\tool,写入进去,然后依次点击确定,记住有三个确定要点击,如下图所示。

注意:在环境变量中添加模块目录后,需要重新打开要执行的导入模块的Python文件,否则新添加的目录不起作用。

  接下来在任意文件中都可以导入 download 模块,并且正常使用。如下图所示。

说明通过该方法添加的目录可以在不同版本的Python中共享。

Python的自定义模块细讲相关推荐

  1. python 导入自定义模块

    python 导入自定义模块 文章目录 python 导入自定义模块 相同文件夹下 文件目录 `module1.py` 自定义模块 `demo.py` 引用文件 不同文件夹下 文件目录 `__init ...

  2. python导入自定义模块_ubuntu下Python导入自定义模块的方法

    ubuntu下Python导入自定义模块的方法 当在python程序中导入自定义模块时,若出现"Import Error:no module named xxx"表明系统在pyth ...

  3. vscode使用python导入自定义模块

    vscode中使用python引入自定义模块 在使用vscode的时候写了一些自定义模块,使用import导入模块的时候发现会出现 "No Module Name xxx(模块名称)&quo ...

  4. python基础--自定义模块、import、from......import......

    自定义模块.import.from......import...... 1)模块的定义和分类 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例 ...

  5. python如何自定义模块_python自定义模块和开源模块使用方法

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  6. python导入自定义模块和路径问题

    文章目录 part one: 文件在同一个文件夹 1.函数调用 2.类调用 part two:文件在不同文件夹 1.在同一个目录 2.在任意目录:绝对路径 1.借助sys 2.借助path part ...

  7. python中自定义模块导入飘红_Pychorm提示Unresolved reference 导入模块报错

    最近使用Pychorm编写Python时,每次要引入自定义模块,就会报错,提示"Unresolved reference" Unresolved reference 'LoginC ...

  8. 对python来说、一个模块就是一个文件-python导入自定义模块和包

    参考资料 https://blog.csdn.net/gvfdbdf/article/details/52084144 http://www.runoob.com/python/python-modu ...

  9. Python引入自定义模块

    目录 1 python基本概念 1.1 python模块 1.2 python包 2 场景应用 2.1 导入同级目录文件 2.2 导入子目录文件 自己手动写了一些.py文件,在互相import的时候总 ...

最新文章

  1. hbase 数据库简介安装与常用命令的使用
  2. 徐小平:全员拥抱区块链是内部分享 1比特币寻泄密者
  3. 大四阶段的社会实践的主要目的是_疫情当前,大三大四的学生“很惨”?大一大二的学生也别松懈...
  4. 柯洁获清华大学免试入学推荐资格
  5. ginapi服务器性能,gin框架构建Api之:环境配置和路由
  6. freebsd内核编译、优化
  7. 电商平台需要怎样的推荐系统?
  8. Windows线程生灭 (二)
  9. SpringAOP 学习笔记
  10. 机器学习方法(二)——xgboost(原理篇)
  11. linux服务器上使用apache部署静态html网页
  12. pythonnet 引用_Python netmiko模块的使用
  13. pythonmt4通讯swot矩阵_最经典的市场部SWOT分析矩阵
  14. 2021-01-29
  15. 各个小组对于“我爱淘”的评价
  16. ACE事件类型及模板
  17. 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转
  18. 自动驾驶(八十一)---------Apollo之感知模块
  19. 线程同步与互斥:互斥锁
  20. 2023年计算机毕设选题推荐

热门文章

  1. js按照“数字-字符-汉字拼音”排序
  2. 电脑常用快捷键大全(含Visual Studio快捷键操作)
  3. 第七章 目录监视 windows程序设计王艳平版
  4. html5测试苹果7plus,iPhone7 Plus的屏幕尺寸是多少?分辨率是多少?
  5. Spring REST是什么?
  6. 矩阵基础2-常用的矩阵计算工具
  7. 阿里巴巴董事局主席兼首席执行官马云
  8. flexslider轮播demo
  9. c++中malloc和new对比
  10. 阿里技术行丨未来已来新零售技术沙龙报名启动!