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

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

包内包含__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,开放3306端口

    首先查看端口是否打开 netstat -an|grep 3306 此图为开启3306端口的截图,之前显示为. . . 127.0.0.1:3306 . . . 打开mysql配置文件vi /etc/m ...

  2. Simotion 绝对值编码器使用外部开关回零

    问题来源: 西门子的1FK7二代电机,目前已经没有增量编码器.标准的编码器选项是单圈绝对值,或多圈绝对值. 在某些应用中,如印刷机的版辊.模切轴.飞剪电机等,需要使用外部开关来回零.下文描述了使用外部 ...

  3. Gradle入门实战(Windows版)

    Installation Gradle runs on all major operating systems and requires only a Java JDK or JRE version ...

  4. BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3744 3744: Gty的妹子序列 Time Limit: 20 Sec  Memory ...

  5. 使用npm uninstall卸载express无效

    最近在看<node.js开发指南>学习node.js,因为书是2012年的书,对应的各种软件.包的版本就特别老,其中第五章用到express,书中版本用的是2.X版本,而我这边通过npm ...

  6. 谈谈Ajax(一)

    解决办法是:比如我是使用SSM框架(Spring+SpringMVC+MyBatis/MyBatis Plus)开发web应用,通常Controller的参数列表与ajax的data保持一致即可,少一 ...

  7. 在js中获取到的页面元素为undefined

    在学习js的过程中发现了一个问题就是:在js代码中获取页面元素进行操作的时候发现怎么都没有效果,控制台也不报错,弹出获取的元素结果发现是undefined类型. 后来查找了资料发现:因为我的js是写在 ...

  8. [译]React如何区别class和function

    原文 How Does React Tell a Class from a Function? 译注: 一分钟概览-- React最后采用了在React.Component上加入isReactComp ...

  9. 启动tomcat的时候为啥你启动的是8,启动起来的确实其他的Tomcat

    如果发现,是启动tomcat的时候为啥你启动的是8,启动起来的确实其他的Tomcat ,你可以去看看你的环境变量,是不是配了一个tomcat,

  10. oracle 数据库密码生产同步模拟环境 ,随记常用命令

    1.查看当前open用户 select username,account_status,expiry_date,profile from dba_users; 2.查看目前的密码过期策略 select ...