包是一种组织管理代码的方式,包里面存放的是模块

用于将模块包含在一起的文件夹就是包

包内包含__init__.py标志性文件

定义一个学生类,一个sayhello函数,一个打印语句

# p01.py
class Student(): def __init__(self, name="NoName", age=18):
self.name = name
self.age = age def say(self):
print("My name is {}".format(self.name)) def sayhello():
print("Hi,你好") print("我是模块p01")

一、定义一个Student类,因p01已定义好,所以直接调用

import p01

a = p01.Student("hh",19)

a.say()

p01.sayhello()
#此段代码会先执行p01中的print,因为导入模块,就相当于把p01整段代码都导入进来,执行的时候会全部执行一遍

二、导入名字以数字开头的包

#01.py,以数字开头的模块
class Student(): def __init__(self, name="NoName", age=18):
self.name = name
self.age = age def say(self):
print("My name is {}".format(self.name)) def sayhello():
print("Hi,你好") print("我是模块p01")
# import 01
# 基于python变量的命名规则,不能以数字开头
# 借助于importlib包可以实现导入以数字开头的模块名称
import importlib A = importlib.import_module("")
a = A.Student()
a.say()

三、导入p01模块,并重新命名为 p

import p01 as p

a = p.Student("hh",18)
a.say()

四、只想用Studen类,别的不想要

from p01 import Student
#有选择性的导入
#使用时候不需要模块名称的前缀 a = Student("hh", 20)
a.say()

五、针对四导入Studen类,为何还会执行print

# p01.py,修改p01代码
class Student(): def __init__(self, name="NoName", age=18):
self.name = name
self.age = age def say(self):
print("My name is {}".format(self.name)) def sayhello():
print("Hi,你好") # 可以有效避免代码被导入的时候被动执行的问题
# 建议所有程序的入口都以此代码为入口
if __name__ == "__main__":
print("我是模块p01")

六、导入包下的所有

# 导入p01模块下的所有
from p01 import *
# 不需要前缀有个坏处,名称太多容易引起混乱 sayhello() a = Student("hh", 19)
a.say()

七、查看所有的包的路径 及 添加路径

import sys

print(type(sys.path))
# 获取路径列表
# 查看包的路径,以方便使用时候的调用
print(sys.path)
for i in sys.path:
print(i) # 添加路径
# sys.path.append(dir)

以下内容举例描述不便,文字描述一下

包内模块调用与模块同级的包用法

语法:import package_name.module

   导入包中某一个具体的模块

使用方法:

   package_name.module.func_name

   package_name.module.class.func()

   package_name.module.class.var

   跟上述用法都差不多

语法 :from package import module1,module2, ......

   此种导入方法不执行 '__init__'的内容

使用方法:

   from package import module

   module.dunc()

语法:from package import *

   导入当前包 '__init__.py' 文件中的所有函数

使用方法:

   func_name()

   class_name.func_name()

   class_name.var

语法: from package.module import *

   导入包中指定模块的所有内容

使用方法:

   func_name()

   class_name.func_name()

经常使用其他路径下的包,可以在当前包中直接导入

import 完整包或者模块的路径

'__all__'的用法,具体百度了解下

在使用from package import * 的时候, *可以导入的内容

'__init__.py' 中如果文件为空, 或者 没有 '__all__',那么可以把 '__init__.py' 中的内容导入进去

'__init__.py' 如果设置了  '__all__' 的值 ,那么按照  '__all__' 指定的子包或者 模块进行导入

如何则不会载入 '__init__.py' 中的全部内容

'__all__' = ['module', 'module1', 'module2', ......]

python3 package management 包管理 实例的更多相关文章

  1. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  2. Linux包管理工具分析

    转自:http://blog.csdn.net/carolzhang8406/article/details/14198219 在正式进入讨论之前,先贴几条非常有用的link: linux 发行版比较 ...

  3. linux--软件包管理工具

    linux平台软件包管理: RPM/DPKG 两大阵营简介 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM ...

  4. TFS:需要包管理许可证才能进一步操作You need a Package Management license to go further

    问题: 为什么团队成员没有查看包管理服务的权限?如下图: 答案: TFS系统的访问级别设置,决定在默认配置中用户是否有包管理的访问权限.默认配置中,只有"VS Enterprise" ...

  5. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  6. 永久解决Sublime包管理package control 打开install package报错 There are no packages available for installation

    很多用户在使用sumblime安装插件的时候,打开package control的install package会出现报错:There are no packages available for in ...

  7. 【Linux】非root安装Python3及其包管理

    1. Python 3.8.1安装 源码安装常规操作: wget -c https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz tar -xv ...

  8. 你需要知道的包管理器(Package Manager)

    最近我花了一点时间关注了在不同系统之中所用到的包管理器(Package Manager) .最开始的时候,我是在使用Linux操作系统时,对这种工具以及它背后的想法深深迷恋住了:这真是自由的软件世界. ...

  9. [Visual Studio] 记一次排错:打不开 Nuget 包管理器里的安装package页面,无法 安装 / 恢复 包

    出差一阵子PC很久没用了, 回来在用Visual Studio (2017) 的时候, 工程里无法安装Package了  >_<    --- 也不知道电脑做了什么?--- Nuget包管 ...

随机推荐

  1. mysql 配置详解

    [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /u ...

  2. Python学习---线程基础学习

    线程基础 什么是线程(thread) 线程是CPU调度能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流[换言之,线程就是一堆指令集合], ...

  3. ubuntu桌面便签 sticky note, xpad

    sudo apt-get install xpad 软件有一个选项,叫做Show window decorations,显示窗口的标题栏.

  4. ADB命令详解及大全( 声明:此文是参考大佬博客所做的笔记!)

    adb是什么? adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...

  5. 「C语言」数据类型及混合运算与类型转换

    深入学习C语言时,有必要先了解一下数据类型的概念,以及它们之间的混合运算与类型转换. 本篇文章便是根据<C语言程序设计教程>和在线翻阅资料后整理而出.(练习题将逐步更新) 目录:     ...

  6. linux 里的`反引号

    Shell中可以将数字或字符直接赋予变量,也可以将Linux命令的执行结果赋予变量,如下: (1) $ count=9           #将数字赋予变量count (2) $ name=" ...

  7. hpp.h与.h的区别

    hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该hpp文件即可,无需再将cpp加入到project中进行编译.而实现代码将直接 ...

  8. C#处理List<object>重复数据的问题

    private class ListDistinct : IEqualityComparer<object> { public bool Equals(object x, object y ...

  9. 分享一个可下拉刷新的ScrollView

    原理:就是动态改变ScrollView header的margin实现 主要的代码: http://blog.csdn.net/swust_chenpeng/article/details/39289 ...

  10. HDU 1275 两车追及或相遇问题(相遇和追及公式)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1275 两车追及或相遇问题 Time Limit: 2000/1000 MS (Java/Others) ...