python学习笔记5.1-理解模块和包

python 是面向对象的编程语言,那么其包含的所有元素都是对象,包括模块和包。包和模块其实都是功能的集合体,只是包的功能更多,包含了很多模块。也就是说包和模块是包含关系。

1. 模块

在python中可以将模块理解为一个包含了特定功能的类、函数、变量的文件,它与其他的python脚本文件也没有什么区别,文件类型也是.py文件,模块名就是该文件名。因而,模块也不具有特别的定义方式,只需要能在路径中搜索到就好。

1.1 模块搜索路径

当python调用模块的时候,首先它要知道去哪儿搜索,python模块的搜索路径有:

  • 1) 当前程序的主目录,也就是你运行程序的目录。
  • 2) PYTHONPATH环境变量里包含的目录,并不是系统环境变量目录。
  • 3) 标准库目录。
  • 4) .pth文件目录。

对于1)和3)都是系统自动生成的,2)和4)用于用户自定义扩展搜索路径。

有了以上知识的了解,一般出现“ImportError: No module named ‘…’”的异常,肯定是因为该module的路径没有被包含,在主程序中用sys.path.append()函数添加该module的路径就能解决。

1.2 将文件路径添加到搜索路径

由1.1可以知道路径的位置,所以添加路径的方法与1.1中的4条对应。

  • 1) 可以把要调用的模块的.py文件复制到运行目录的下面。
  • 2) 将模块目录添加到系统环境标量中的PYTHONPATH中
  • 3) 用函数sys.path.append(‘…’)添加
  • 4) 添加.pth文件。
    • 在site-packages添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的模块文件所在的目录名称就是了。
      • 1 windows: c:\python27\site-packages,把pth文件直接放在c:\python27(或其他python安装目录)目录下测试也是有效的
      • 2 linux(ubuntu) /usr/local/lib/python2.7/dist-packages (note by shanql, 我是放在这个目录下有效的,所添加的目录一定要存在,不存在则会不成功)
      • 3 linux(redhat) /usr/lib/python2.7/site-packages

2. 包(库)

通常来说,一个包就是一个包含有许多模块(.py文件)的目录,在构建包的时候,包里的模块的功能应该关系密切,这样有利于包的维护和使用。包的文件结构层次应该包含:

A/
    __init__.py
    file1.py
    file2.py

A即为包的名称,也是文件夹的名称,可以看出python是以名称空间来索引的。file1.py和file2.py是两个功能模块。init.py文件是必须存在的,但是它的内容可以为空,也就是可以创建一个空文件即可,当然也可以巧妙的使用init.py文件,使自己的代码更加简洁,方便。

当然,包的文件目录中还可以包含包,但是init.py文件是必须存在的。

A/
    __init__.py
    sub_a/
        __init__.py
        file1.py
        file2.py

    sub_b/
        __init__.py
        file1.py
        file2.py    

    sub_c/
        __init__.py
        file1.py
        file2.py

这里模块名称是可以重复的(最好不这么做),因为在导入包的时候会有包名的名称空间,因而导入的时候会使用包名的名称空间,例如:

from A import sub_a
from A import sub_b
使用的时候:
sub_a.file1 和sub_b.file1是不一样的

包的导入以及其他一些高级操作以后慢慢详细说明。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

Python 远程控制模块 paramiko 问题解决记录

生产环境中使用paramiko作SSH远程控制时,发现会有部分机器报Error reading SSH protocol banner错误,尝试使用ssh命令连...

6.7K20
来自专栏唐郑望的专栏

Django数据处理的一些实践

提到 Django 肯定避不开 MVC 模式,即模型(Model)-视图(View)-控制器(Controller),通过将业务逻辑、数据、界面显示分离的方法组...

38210
来自专栏社区的朋友们

深度学习入门实战(二):用TensorFlow训练线性回归

上一篇文章我们介绍了 MxNet 的安装,但 MxNet 有个缺点,那就是文档不太全,用起来可能是要看源代码才能理解某个方法的含义,所以今天我们就介绍一下 Te...

6.4K10
来自专栏崔庆才的专栏

腾讯云主机Python3环境安装Scrapy爬虫框架过程及常见错误

Scrapy安装介绍Scrapy的安装有多种方式,它支持Python2.7版本及以上或Python3.3版本及以上。下面说明Python3环境下的安装过程。Sc...

2.6K10
来自专栏钟志远的专栏

【腾讯云的1001种玩法】云服务器搭建Python爬虫环境

在上一篇文章中,我们已经学会了在云服务器上搭建Python环境了,假设你已经在云服务器上搭建好了Python环境,我们将进入下一步:搭建Python爬虫环境。

4K30
来自专栏腾讯移动品质中心TMQ的专栏

如何轻松爬取网页数据?

在实际工作中,难免会遇到从网页爬取数据信息的需求,如:从微软官网上爬取最新发布的系统版本。很明显这是个网页爬虫的工作。本文将根据网站特性进行分类介绍几种使用py...

5K20
来自专栏胖胖的专栏

实战干货:从零快速搭建自己的爬虫系统

本文简要归纳了网页爬虫的基础知识,着重于利用现有组件,快速建立一套实际可用的网页爬取、分析系统。系统主要使用Python 作为开发语言,在 Linux 或 Ma...

4.5K40
来自专栏钟志远的专栏

【腾讯云的1001种玩法】云服务器搭建Python环境

之前一直在用阿里云服务器跑爬虫、小脚本。这两天在朋友的安利下转到了腾讯云上面来,刚好趁这个机会写一写有关于云服务器上Python爬虫环境的搭建。

7.1K60
来自专栏张宁的专栏

反爬虫和抗DDOS攻击技术实践

企鹅媒体平台媒体名片页反爬虫技术实践,分布式网页爬虫技术、利用人工智能进行人机识别、图像识别码、频率访问控制、利用无头浏览器PhantomJS、Selenium...

2K10
来自专栏社区的朋友们

深度学习入门实战(一):像Prisma一样算法生成梵高风格画像

现在人工智能是个大热点,而人工智能离不开机器学习,机器学习中深度学习又是比较热门的方向,本系列文章就从实战出发,介绍下如何使用MXnet进行深度学习~

10.4K30

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励