python2和python3(导包)自定义包并导入之

2024-05-05 15:08

本文主要是介绍python2和python3(导包)自定义包并导入之,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、module和Package的定义

A module is a file containing Python definitions and executable statements( intended to initialize the module), file name is the module name 

Packages are a way of structuring Python’s module namespace by using “dotted module names”.

也就是说package是module(文件)的一种组织结构,这种组织结构用'.'来组织上下层次关系,如下所示:

sound/                          Top-level package__init__.py               Initialize the sound packageformats/                  Subpackage for file format conversions__init__.pywavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.py...effects/                  Subpackage for sound effects__init__.pyecho.pysurround.pyreverse.py...filters/                  Subpackage for filters__init__.pyequalizer.pyvocoder.pykaraoke.py

package的定义有了,那么如何来表现呢?

在解析器搜索过程中,把一个含有__init__.py文件的目录(文件夹)视作package。

目录的存储层级就是包和模块的层级,在引用时候‘.’来表现这种上下层关系就可以了。

如导入sound目录下的effects目录下的echo模块只需要

import sound.effects.echo
or
from sound.effects import echo

(代码一)

二、包内引用(Intra-package References)

同包内的子模块之间可以通过绝对路径的方式相互引用,如上面的import sound.effects.echo,里面的sound就

可以通过遍历sys.path里面目录搜索到。

如果觉得绝对路径引用不合适,还可以选择相对导入 relative imports,相对导入只需要将某一层替换为'.'或者'..'

如下

from . import echo
from .. import formats
from ..filters import equalizer

这里面'.'代表当前目录所在的包(子包),'..'代表上级目录所在的包(子包)。

(实际测试import .effects.echo无效)

三、实战演示

1) python2自定义包并导入

首先在任意路径创建一个文件夹,来放我们自定义的包的文件。
我的是创建在/home/xyh/test_package,下边是我的目录结构。要在另一个不相关的文件夹下的python应用中引用到我们自定义的包。就是在/home/xyh/test_package2/use_lucky_package.py中导入lucky_package.py这个包,测试直接

 import lucky_package或者直接from test_package import lucky_package是不行的。

需要在test_package文件夹中创建_init_.py文件,里边什么都不需要编辑。尝试一下,可以了。

注释:如果有初始化需要可以放到_init_.py中。

2) python3自定义包并导入

python 3.3+开始支持隐式命名空间包。

通俗的讲就是如果_init_.py中不需要放初始化,那么可以直接省略掉

如果_init_.py中的初始化不能省略,那么_init_.py可以像python2中一样保留下来。

 parent_package/__init__.py            <- EMPTY, NOT NECESSARY in Python 3.3+child_package/__init__.py       <- STILL REQUIRED if you want to run an initialization scriptchild1.pychild2.pychild3.py

如果在python3中要导入同目录到包,还可以在包名前加上一个. ,来解决找不到包的问题,如下:

from .user import User
from .dir import Dir

常见错误

from .foo import foo

执行时候报错

ImportError: attempted relative import with no known parent package

把.去掉,同时把foo.py的目录添加到PYTHONPATH中即可

解释:把.去掉那么就不是导package了,而是导入module,解析器搜索module的默认目录在 sys.path变量里面, sys.path变量默认被初始化成

  • build-in

  • The directory containing the input script (or the current directory when no file is specified).(同目录, 注意是主脚本的同目录)

  • PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).

  • The installation-dependent default.

所组成的list

这篇关于python2和python3(导包)自定义包并导入之的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/961991

相关文章

浅析Python中的绝对导入与相对导入

《浅析Python中的绝对导入与相对导入》这篇文章主要为大家详细介绍了Python中的绝对导入与相对导入的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1 Imports快速介绍2 import语句的语法2.1 基本使用2.2 导入声明的样式3 绝对import和相对i

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

python安装whl包并解决依赖关系的实现

《python安装whl包并解决依赖关系的实现》本文主要介绍了python安装whl包并解决依赖关系的实现,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、什么是whl文件?二、我们为什么需要使用whl文件来安装python库?三、我们应该去哪儿下

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

Python3中Sanic中间件的使用

《Python3中Sanic中间件的使用》Sanic框架中的中间件是一种强大的工具,本文就来介绍Python3中Sanic中间件的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录Sanic 中间件的工作流程中间件的使用1. 全局中间件2. 路由中间件3. 异常处理中间件4. 异步中间件5. 优先级

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空