0

0

python中包是什么?有什么作用?python中包的介绍

不言

不言

发布时间:2018-11-20 16:10:57

|

8693人浏览过

|

来源于博客园

转载

本篇文章给大家带来的内容是关于python中包是什么?有什么作用?python中包的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1.什么是包?

包是一种通过".模块名"来组织python模块名称空间的方式.我们穿件的每个文件夹都可以被称为包.

但是要注意, 在python2中规定. 包内必须存在__init__.py文件.

创建包的目的不是为了运行, 而是被导入使用. 包只是一种形式而已,包的本质就是一种模块.

立即学习Python免费学习笔记(深入)”;

2.包的作用?

包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来,随着功能越写越多,我们无法将

所有功能都放在一个文件夹中,于是我们使用模块去组织功能,随着模块越来越多,我们就需要用文件夹将

模块文件组织起来,以此来提高程序的结构性和可维护性.

接下来创建一些包用来后面的学习.包很好创建,只需要一个文件夹,有__init__.py就可以了.

import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
l = []
l.append(open('glance/__init__.py','w'))
l.append(open('glance/api/__init__.py','w'))
l.append(open('glance/api/policy.py','w'))
l.append(open('glance/api/versions.py','w'))
l.append(open('glance/cmd/__init__.py','w'))
l.append(open('glance/cmd/manage.py','w'))
l.append(open('glance/db/__init__.py','w'))
l.append(open('glance/db/models.py','w'))
map(lambda f:f.close() ,l)

创建好目录结构

我们给每个文件夹中添加一些方法:

#policy.py
def get():
    print('from policy.py')
    
#versions.py
def create_resource(conf):
    print('from version.py: ',conf)
    
#manage.py
def main():
    print('from manage.py')
    
#models.py
def register_models(engine):
    print('from models.py: ',engine)

我们在test.py中就可以使用包中的内容, 并且,我们导入包的时候可以使用import或者from xxx import xxx的形式

import glance.db.models
glance.db.models.register_models('mysql')
from glance.api.policy import get
get()

但是,注意:from xxx import xxx这种形式, import后⾯不可以出现"点" 也 就是说from a.b import c是ok的.

但是 from a import b.c 是错误的

3.__init__.py是干什么的?

不论我们使用哪种方式导入一个包, 只要是第一次导入包或者是包的任何其他部分, 都会先执行__init__.py文件.

这个文件可以是空的, 但是也可以存放一些初始化的代码.

那么我们之前用的from xxx import * 能用在包的调用上吗?

可以,我们要在__init__.py文件中给出__all__来确定*导入的内容.

行盟APP1.0 php版
行盟APP1.0 php版

行盟APP是结合了通信和互联网的优势,加之云计算所拥有的强大信息资源,借助广大的终端传递服务,潜在的拥有巨大商机。她到底是什么,又有什么作用?她是一款手机应用软件;她是一款专门为企业服务的手机应用软件;她是一款能够将企业各种信息放入其中并进行推广传播的手机应用软件!只要轻轻一点,企业的简介,产品信息以及其他优势就能最快最大限度的透过手机展现在客户的眼前,一部手机,一个APP,你面对的将是一个6亿&

下载
print("我是glance的__init__.py⽂件. ")
x = 10
def hehe():
    print("我是呵呵")
    
def haha():
    print("我是哈哈")
__all__ = ['x', "hehe"]

test.py

from glance import *
print(x) # OK
hehe() # OK
haha() # 报错. __all__⾥没有这个⻤东⻄

4.相对导入和绝对导入

我们的最定级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种导入方式.

1).绝对导入:一glance作为起始

2). 相对导入: 用 . 或者 .. 作为起始

例如, 我们在glance/api/version.py中使⽤glance/cmd/manage.py

# 在glance/api/version.py
#绝对导⼊
from glance.cmd import manage
manage.main()
#相对导⼊
# 这种情形不可以在versions中启动程序.
# attempted relative import beyond top-level package
from ..cmd import manage
manage.main()

我们在测试的时候要注意,python包路径跟运行脚本所在的目录有关系.

在python中不允许你运行的程序导报的时候超过当前包的范围(相对导入).

如果使用绝对导入.没有这个问题.即,如果你在包内使用了相对导入.那在使用该包内信息的时候.只能在包外面导入

# 在policy.py
import versions

如果我们程序的入口时policy,那此时程序是没有任何问题的.但是如果我们在glance外面import了glance中的policy就会报错.

原因是如果在外面访问policy的时候.sys.path中的路径就是外面.所以根本就不能直接找到versions模块.所以一定会报错:

ModuleNotFoundError: No module named 'versions'

当我们导包出错的时候,一定要先看sys.path.看一下是否真的能获取到包的信息.

5.单独导入一个包

# 在test.py中
import glance

此时导入的glance什么做不了.因为在glance中的__init__.py中并没有关于子包的加载.此时我们需要在__init__.py中分别去引入子包中的内容.

1.使用相对路径

2.使用绝对路径

包的注意事项:

关于包相关的导入语句也分别为import和from xxx import xxx两种, 但无论使用哪种,无论在什么位置,在导入时都必须遵循一个原则: 凡是在导入时带点的,

点的左边都必须是一个包. 否则报错. 可以带一连串的点. 比如: from a.b.c import d

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号