包的产生:

  • 由于模块不断更新,越写越大,仅用单个py文件会使模块逻辑不够清晰,所以需要将模块的不同功能放入不同的py文件,然后将所有py文件放在一个目录内,这个目录就是包
  • 包就是一个包含用__init__.py文件的目录

包的使用:

  • 包的本质是模块的一种形式,包是用来被当做模块导入,而不是用来直接运行
  • 导入包本质是导入包内的__init__.py文件
import package

# Python2导入包,若包里没有__init__.py文件会报错
# Python3导入包,若包里没有__init__.py文件不会报错

包的导入:

  • 首先有如下文件结构
'''
test_dir/
-pkg1
-__init__.py
-p1_m1.py
-f1()
-p1_m2.py
-f2()
-pkg2
-__init__.py
-p2_m1.py
-f3()
-p2_m2.py
-f4()
-demo.py '''
  • 在demo.py内使用函数f1
  • 方式一:

import pkg1.p1_m1
pkg1.p1_m1.f1() # 使用过于啰嗦,可以起别名
import pkg1.p1_m1 as m1
m1.f1()
  • 方式二:
# 直接从包内导入文件
from pkg1 import p1_m1
p1_m1.f1() # 也可直接导入f1
from pkg1.p1_m1 import f1
f1()

注:对使用者来说,包的导入和单个模块的导入应该方式相同,若使用者导入包失败,应考虑包是否在sys.path列表中。

  • from ...impot 的from 后面可以带多个点. 点的左侧只能是包的名字。

  • from...import 的import后面只能接py文件或文件内的方法

    不能带点.

from pkg1 import p1_m1.f1
p1_m1.f1()
# 语法错误

若要让使用者对包的导入不会发生变化(当作单个模块导入),需要在包内的__init__.py文件内导入其他的模块

  • 绝对导入:

    • 以包作为顶级目录来导入

      # pkg1/__init__.py文件内
      from pkg1.p1_m1 import f1
      from pkg1.p1_m2 import f2
      from pkg2.p2_m1 import f3
    • 点的左侧必须是包

  • 相对导入

    • 仅限于包内使用,不能跨出包
    • . :表示当前目录
    • .. :表示上一级目录
# pkg1/__init__.py文件内
from .
注:包内之间的导入推荐使用相对导入
  • 在__init.py__内使用from ... import ... 导入包内的其他模块时,无法直接在init.py文件内运行,只能被其他文件用来导入

  • 在init.py文件内不能使用import p1_m1导入包内的其他文件,这样虽然可以直接在init.py文件内运行导入的模块,但当包被其他文件导入时,由于sys.path环境变量原因,包无法使用。

Python之包的相关的更多相关文章

  1. python 浅析模块,包及其相关用法

    今天买了一本关于模块的书,说实话,模块真的太多了,小编许多也不知道,要是把模块全讲完,可能得出本书了,所以小编在自己有限的能力范围内在这里浅析一下自己的见解,同时讲讲几个常用的模块. 这里是2018. ...

  2. python浅析模块,包及其相关用法

    一,模块 什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里面,代码会越来越长,越来越不容易维护. 为了编写可以维护的代码,我们把很多函数分组,分别放到不同额文件,这样,每个文 ...

  3. 机器学习常用Python扩展包

    在Ubuntu下安装Python模块通常有3种方法:1)使用apt-get:2)使用pip命令(推荐);3)easy_instal 可安装方法参考:[转]linux和windows下安装python集 ...

  4. Python 中包/模块的 `import` 操作

    版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...

  5. 利用python数据分析与挖掘相关资料总结

    小生今年研二,目前主要从事软件工程数据挖掘与分析.之前一直苦于找不到一个从数据预处理.数据分析.数据可视化和软件建模的统一平台.因此,小生辗转反辙学习了java,R语言,python,scala等等. ...

  6. 关于python的包

    参考文献:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html 注:本文大多对上连接的整理,仅用于学习,望博主见谅.转载请附上上述链接. 为什么要包 ...

  7. 快速学习 Python 数据分析包 之 pandas

    最近在看时间序列分析的一些东西,中间普遍用到一个叫pandas的包,因此单独拿出时间来进行学习. 参见 pandas 官方文档 http://pandas.pydata.org/pandas-docs ...

  8. linux和windows下安装python拓展包及requirement.txt安装类库

    python拓展包安装 直接安装拓展包默认路径: Unix(Linux)默认路径:/usr/local/lib/pythonX.Y/site-packagesWindows默认路径:C:\Python ...

  9. Python基础-包与模块

    Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...

随机推荐

  1. 第23课 - #error 和 #line 使用分析

    第23课 - #error 和 #line 使用分析 1. #error 的用法 (1)#error 是一个预处理器指示字,用于生成一个编译错误消息,这个消息最终会传递到编译器(gcc) 在思考这一点 ...

  2. [剑指Offer]57-和为s的数字

    题目一 输入一个递增的数组和一个数字,在数组中查找2个数字,是他们的和正好为S,如果有多对的和为S,则输出任意一对即可. 题解 关键信息是数组有序.初始化i,j指向第一个和第二个数,与S比较,若小了, ...

  3. [程序员代码面试指南]递归和动态规划-换钱的方法数(DP,完全背包)

    题目描述 给定arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim,求组成aim的方法数. 解题思路 完全背包 和"求换钱的 ...

  4. Knowledge 1:Propositional Logic 命题逻辑基础及符号

    Keywords reasoning 推理 Deductive reasoning(for a basic logic) 演绎推理 analogy 类比:比喻 /əˈnælədʒi/ definiti ...

  5. CTF-BugKu-WEB-1-20

    2020.09.17 全面复习web,给自己定个目标,后天之前结束BugKu-Web,开始逆向. 经验教训 php弱等于用于绕过==,弱等于之前会把等号两边转化为同一类型变量: 全局变量全局变量全局变 ...

  6. nginx中编写lua拦截器

    先配置nginx        location ~ .*\.(php|php5)?$        {                if ($request_uri ~ "one/tes ...

  7. day54:django:锁和事务&Ajax&中间件Middleware

    目录 1.ORM中的锁和事务 2.Ajax 3.中间件:Middleware 3.1 什么是中间件? 3.2 django请求的生命周期 3.3 中间件可以定义的5个方法 3.4 自定义中间件的流程 ...

  8. Linux安装指定版Git以及卸载

     来自于:https://www.cnblogs.com/rstyro/articles/10817855.html 安装Git 在linux中,安装Git 一般一条命令即可,如下: Debian/U ...

  9. jfinal3连接sqlserver2012 保存日期字段出现“不支持从 UNKNOWN 到 UNKNOWN 的转换”错误

    修改Dialect中的fillStatement方法,增加判断日期类型并转换为时间戳

  10. RocketMQ系列:rocketmq运维控制台使用详解(全网独家)

    搭建好了RocketMQ的console之后,直接在浏览器打开http://{你的ip}:8080 默认会进入到驾驶舱(dashboard). 总览 整体横向菜单分为八个部分: 运维:主要是设置nam ...