一、什么是包

包就是一个包含有__init__.py文件的文件夹

二、为何要有包

包的本质是模块的模块的一种形式,包是用来被当做模块导入

1、产生一个名称空间

2、运行包下的__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中

3、在当前执行文件的名称空间中拿到一个名字mmm,mmm指向1的名称空间

import mmm

from mmm import x

三、python3中与python2中的__init__.py的不同:

如果下面存放了好多模块,当然每个模块都应该有自己自己的名字。我们需要把这些名字拿到__init__.py里面, 才能使用。python3中即便没有这个__init__.py文件也不会报错,pyhon2二中就会报错。是因为Python 3具有隐式命名空间包,允许它创建没有__init__.py文件的包。但是在python2中必须要有__init__.py这个文件。

四、包的使用

1、导入包和__init__.py

包属于模块的一种,因而包以及包内的模块均是用来被导入使用的,而绝非被直接执行,首次导入包(如import mmm)同样会做三件事:

1、产生一个名称空间

2、运行包下的__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中

3、在当前执行文件的名称空间中拿到一个名字mmm,mmm指向1的名称空间

import mmm

from mmm import x

强调:

1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。

可以带有一连串的点,如import 顶级包.子包.子模块,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

2、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

3、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

2、绝对导入和相对导入

绝对导入,以包的文件夹作为起始来进行导入

import sys

print('==========>这是在被导入的__init__.py中查看到的sys.path')

print(sys.path)

from foo.m1 import f1

from foo.m2 import f2

from foo.m3 import f3

from foo.bbb.m4 import f4 # foo内有了一个f4

# # import foo.bbb.m4.f4 # 语法错误,点的左侧必须是一个包

相对导入:仅限于包内使用,不能跨出包(包内模块之间的导入,推荐使用相对导入)

# .:代表当前文件夹

# ..:代表上一层文件夹

from .m1 import f1

from .m2 import f2

from .m3 import f3

from .bbb.m4 import f4

"""

强调:

1、相对导入只能在包内部使用,用相对导入不同目录下的模块是非法的

2、无论是import还是from import,但凡是在导入时带点的,点的左边必须是包,否则语法错误

3、绝对导入是没有任何限制的,所以绝对导入是一种通用的导入方式

"""

3、from 包 import *

在使用包时同样支持from pool.futures import *

* 代表的是futures下__init__.py中所有的名字,通用是用变量__all__来控制*代表的意思

需要说明一点,包内部的目录结构通常是包的开发者为了方便自己管理和维护代码而创建的

这种目录结构对包的使用者往往是无用的,此时通过操作__init__.py可以“隐藏”包内部的目录结构,降低使用难度,比如想要让使用者直接使用

import aaa

aaa.get()

需要操作sum下的__init__.py(提示: get在sum的aaa.py中):

from .aaa import get

五、软件开发的目录规范

Foo/

|-- core/ # 存放业务逻辑相关代码

| |-- core.py

|

|-- api/ # 存放接口文件,接口主要用于为业务逻辑提供数据操作。

| |-- api.py

|

|-- db/ # 存放操作数据库相关文件,主要用于与数据库交互

| |-- db_handle.py

|

|-- lib/ # 存放程序中常用的自定义模块

| |-- common.py

|

|-- conf/ # 存放配置文件

| |-- settings.py

|

|-- run.py # 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤

|-- setup.py #安装、部署、打包的脚本。

|-- requirements.txt # 存放软件依赖的外部Python包列表。

|-- README # 项目说明文件

README的内容:

1、软件定位,软件的基本功能;

2、运行代码的方法: 安装环境、启动命令等;

3、简要的使用说明;

4、代码目录结构说明,更详细点可以说明软件的基本原理;

5、常见问题说明。

python的包文件叫什么_python之包和文件目录规范相关推荐

  1. python 打包wheel文件,自己的SDK包

    python 打包wheel文件,自己的SDK包 文章目录 python 打包wheel文件,自己的SDK包 具体参考官方 文件目录结构 `setup.py` `demo.py` `__init__. ...

  2. python读取压缩文件的大小_python查看zip包中文件及大小的方法

    python查看zip包中文件及大小的方法 本文实例讲述了python查看zip包中文件及大小的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python import ...

  3. python导入包相当于什么_Python 引入包的两种方式区别

    原博文 2014-05-16 11:18 − 1.import XXX仅仅是告诉我们需要使用这个包,但是你真正使用的时候,需要完整的导入这个包的全路径 比如: import wechat.views ...

  4. 【Python】将文件夹压缩成zip包

    使用python将文件夹压缩成zip包的过程: 先创建空的zip文件,然后遍历读取文件夹中文件,依次塞进zip文件中,即完成压缩. 例如,要将testDir文件夹压缩成test.zip,并存放在同级目 ...

  5. python多线程读取文件的问题_Python多线程同步---文件读写控制方法

    1.实现文件读写的文件ltz_schedule_times.py #! /usr/bin/env python #coding=utf-8 import os def ReadTimes(): res ...

  6. python处理excel文件的模块_python处理Excel文件的几个模块

    在python中简单地处理excel文件,有几个相关的模块,各有千秋,本文将不定时收录. Python Excel网站收集了关于python处理excel文件的各种信息. [注意]使用python处理 ...

  7. python的dll文件在哪_Python运行DLL文件的方法

    什么是DLL文件? DLL文件为动态链接库(英语: Dynamic-link library, 缩写为DLL) 它是微软公司在微软视窗操作系统中实现共享函数库概念的一种实现方式 先来阐述一下DLL(D ...

  8. python 读取txt文件为字典_python将txt文件读取为字典的示例

    如下所示: # -*- coding: utf-8 -*- # @Time :18-8-2 下午3:23 import sys reload(sys) sys.setdefaultencoding(' ...

  9. python 怎么判断文件存在哪里_Python判断文件和文件夹是否存在的方法

    一.python判断文件和文件夹是否存在.创建文件夹 复制代码 代码如下: >>> import os >>> os.path.exists('d:/assist' ...

最新文章

  1. 第一次写购物车,甚是简陋。
  2. nginx服务器的文件大小的限制解决方法
  3. 课程设计:基于SQL Server的银行ATM 存取款机系统设计与实现
  4. 网络不稳定的原因_关键词排名波动原因,如何解决网站排名不稳定!
  5. IntelliJ检查给出“无法解析符号”但仍编译代码
  6. 【数据结构笔记33】C实现:希尔排序、增量序列
  7. oracle弱口令攻击
  8. html修改颜色的代码大全,html代码大全(基础使用代码)(颜色代码完整版)
  9. mysql主键和外键的连接_MySQL主键和外键使用及说明
  10. Padavan 老毛子路由器登录SSH教程
  11. agentweb回到首页_AgentWeb , 一个简洁易用的 Android Web 库
  12. js 根据公历日期 算出农历_Javascript农历与公历相互转换
  13. 面向对象方法及软件工程实验二
  14. 终结版水与油——致我献给魔术的青春
  15. 大文件上传到linux服务器,上传文件到服务器的Linux命令
  16. 达梦数据库(DM8)基本使用
  17. 观后感 - stormzhang 跨年直播
  18. i.MX 6ULL 驱动开发 一:搭建开发环境
  19. [读书笔记]《小强升职记》
  20. 空气动力学——第二章 基本原理和基本方程

热门文章

  1. Win7旗舰版系统时间不准确怎么办
  2. mac怎么设置默认浏览器 mac默认浏览器设置方法
  3. 怎么修改腾讯视频账户和密码
  4. Unity3D下Linux平台播放RTSP或RTMP流
  5. IDEA项目中 target 目录的作用
  6. java put set_Java PutItemRequest.setItem方法代码示例
  7. docker 启动成功但无法访问_docker nginx 运行后无法访问的问题解决
  8. ntko跨浏览器插件_继泄露版后,微软全新 Chrome 内核 Edge 浏览器你都测试过了吗?...
  9. html列表按时间排序代码_按字母顺序排序的列表
  10. typeof 数据类型转换