一、什么是包

包就是一个包含有__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. OpenCV 2.2.0 CvvImage的使用
  2. 2021年去中心化金融平台22亿美元加密货币被盗
  3. Glassfish3 asadmin 常用命令
  4. Python 多进程异常处理的方法,你会吗
  5. pytagcloud支持中文(汉仪全唐诗体简)
  6. Keras 深度学习框架中文文档
  7. spring AOP源码分析(一)
  8. 揭秘:导致局域网网速变慢的五大真凶
  9. HDU1285 确定比赛名次【拓扑排序】
  10. 区块链100讲:详解Po.et 技术栈
  11. 3DMAX贴图材质免费网站
  12. 基于Python的招聘网站招聘信息分析
  13. hadoop cascading demo
  14. 2021-2022上学期 奖状的清单
  15. 如何才能降低亚马逊账号关联?
  16. 20P37 Premiere预设200种文字标题介绍动画合集包 200 Titles Collection下载
  17. 【SQL】关于SQL Server的性能优化——基础内容
  18. 专门卖游戏辅助的平台_各大游戏售卖平台
  19. Android NDK(ndk-r16b)交叉编译FFmpeg(3.3.9)
  20. 【摘苹果】scratch蓝桥杯集训题目

热门文章

  1. Win10系统如何查看声卡ID
  2. 如何在QQ浏览器查看默认搜索引擎
  3. Maven构建分布式项目时子模块相互依赖打包技巧
  4. Java面向对象编程篇1——类与对象
  5. try-catch-finally的执行顺序
  6. 空间服务器有问题是系统问题吗,服务器空间租用两个主要问题要留意
  7. aixs1 生成java代码_通过axis1.4 来生成java客户端代码
  8. java 记事本编译_肿么用记事本编译运行java程序代码?
  9. 的mvc_简述PHP网站开发的MVC模式
  10. Git初学札记(五)————Branch分支管理