首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python绝对导入相对导入

Python 相对导入与绝对导入,这两个概念是相对导入而言导入即是模块导入内部模块。...相对导入可以避免硬编码带来维护问题,例如我们改了某一顶层名,那么其子所有的导入就都不能用了。...相对与绝对仅针对导入而言最后再次强调,相对导入与绝对导入仅针对于导入而言,要不然本文所讨论内容就没有意义。...所谓,就是包含 __init__.py 文件目录,该文件在导入时会被首先执行,该文件可以为空,也可以在其中加入任意合法 Python 代码。相对导入可以避免硬编码,对于维护是友好。...这是因为这两个文件所在目录不是一个,那么每一个 python 文件都是一个独立、可以直接被其他模块导入模块,就像你导入标准库一样,它们不存在相对导入和绝对导入问题。

4.1K21
您找到你想要的搜索结果了吗?
是的
没有找到

Python相对、绝对导入浅析

当模块是一个(package)时候__package__==__name__,如果模块是非package并且是一个top-level模块那么__package__设置为空字符串,对于子模块那么__package...__import__,重点说一下level这个参数:  - 用来表示absolute还是relative导入;  - 如果为0则表示是absolute导入;  - 大于0表示relative导入相对导入父目录级数...这里之所以会报错就是因为__package__为空字符串则表示这是一个顶层常规Python源码模块(top-level module),那么此时如果再有relative导入那么就没法进行模块定位了。...code 4:如果是relative导入,那么需要计算相对锚点是哪个,例如在spam.foo.test模块中执行import ..sub那么最后计算得出需要导入模块是spam.sub。 ...spam中执行import foo,那么会要先尝试导入spam.foo(我们上面代码中标注code 1),如果失败了则再执行absolute导入foo(我们上面代码中标注code 2)。

1.2K70

2018年8月13日相对导入和绝对导入本地发布和网络发布

#发布模块文件列表,不用写setup ) 执行当前程序文件构建操作命令:按照标准格式组织所有数据文件 python setup.py build REMARK:构建完毕文件...引入最低级也要是模块级别的文件 相对引入:  相对引入命令必须要在终端中才能运行,输入命令是:python -m 父目录名.main.py,并且引入东西都需要 先在__init__文件中事先定义才能正常运行...相对引入直接引入模块: from . import test1      1.相对引入直接引入名: from . import 名 : 2.相对引入直接引入模块 from .plane.../方法名/类型名称 from .plane.utils import func func() #这是相对于父目录进行相对引入,执行时候不能直接在本模块中执行, 因为在本模块中执行的话python...是唯一一个,不能再相对引入, 所以为了不报错,采用这种引用方式正确执行命令是在终端中输入:python -m 父目录名.main.py,找到参照物才能正确执行 有了from引入方式之后可以引入比模块名更加细致东西

60630

Python导入机制

当在模块中使用import语句时候,不同语法会导致不同模块搜索导入方式,常见导入方式如下: 绝对导入(absolute import) 显式相对导入(explicit relative import...) 隐式相对导入(implicit relative import) 需要注意是,这些导入方式都是对于模块而言,对于一般模块还是从sys.path搜索入手。...Prerequisite Python脚本运行方式? Python脚本运行分为两种方式:一种是作为top level script运行,另一种则是作为被导入模块运行。...绝对导入模式是Python3默认采取导入方式,其实这种方式在Python2.5及以上版本就已经实现,要想使用只需加上: from __future__ import absolute_import...(作为top level脚本执行)使用显示相对导入方法:在执行python命令时加上-m选项,此时就会启用模块__package__属性。

1.3K10

Python sys os getpass 导入

导入 导入一个py文件,解释器解释该py文件 导入一个,解释器解释该包下 init.py 文件 import module 直接导入模块 from module.xx.xx import...xx 从某个模块导入某个模块 from module.xx.xx import xx as rename 从某个导入模块并给起个别名 from module.xx.xx import * 从某个导入该包下所有模块...setup.py build 安装源码 python setup.py install sys模块 导入方式: import sys 模块用途:调取系统信息 功能介绍 sys.argv 命令行参数...:执行系统操作 功能介绍 os.getcwd() 获取当前工作目录,即当前python脚本工作目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir...path所指向文件或者目录最后修改时间 os.getpid() 获取进程pid os.getppid() 获取父进程pid subprocess 导入方式:import subproess

1.3K10

Python与模块导入问题

导入报错 python导入与模块时,一般会遇到两个问题: 1、ValueError: attempted relative import beyond top-level package 2、ModuleNotFoundError...: No module named 'testpkg' 一个是不能导入顶层超过顶层层次,一个是找不到模块 网上介绍和测试 1、https://www.cnblogs.com/linkenpark...1、使用相对路径导入导致顶级层次报错,python中以当前运行脚本所在目录作为顶层层次,比如运行run.py时,A\B都是顶级层次,不能跨越顶级层次引用或模块!...如果grok.py中打印__name__,会看到路径为A.grok,A便为此时顶级层次,不能跨顶级层次访问B 2、运行脚本时不能识别到顶级层次外模块,所以导致报错2 如何注意和规划代码层次 1...3、如果内部模块一定要跨顶级层次导入,则应该使用sys.path.append来将路径添加到python查找路径中 4、遇到类似问题,非常轻易定位,第一步分析当前顶级层次,是否有跨顶级层次导入

2.4K40

python学习笔记5.2-和模块导入

在理解什么是以及什么是模块之后,就要学会如何去导入或者模块了,本文主要介绍如何导入以及在导入过程中需要注意一些什么。...导入核心是使用关键词import以及搭配其他一些关键词(from,as)等。因而根据不用需要会有以下几种导入形式。 1....只使用import导入 一般情况下,如果比较小,功能比较单一,或者是属于系统功能,能够使用很短字符就能使用函数或类时候,就只需要用关键词import,显得代码逻辑更加清晰。...import numpy as np import matplotlib.pyplot as plt 3. import 搭配from 有时候我们只想导入一个一个特定功能模块,这样会节约内存使用...from matplotlib import pyplot as plt from numpy import random 4. import 搭配 from * 有时候我们想导入或者模块后直接使用导入对象名来调用对象

77860

【从零学习python 】38.Python使用及导入方式

使用 一个模块就是一个 py 文件,在 Python 里为了对模块分类管理,就需要划分不同文件夹。...多个有联系模块可以将其放到同一个文件夹下,为了称呼方便,一般把 Python一个代码文件夹称为一个。 1....导入方式 现有以下newmsg,里由两个模块,分别是sendmsg.py、recvmsg.py文件。...from newmsg import sendmsg 使用__init__.py文件,导入指定模块。 可以在newmsg里创建__init__.py文件,在该文件里导入指定内容。...2. init.py文件有什么用 init.py 控制着导入行为。init.py为空仅仅是把这个导入,不会导入模块。可以在__init__.py文件中编写内容。

11410

一文搞懂Python核心概念:导入,模块,

PART 01 前言 Python作为一个解释器,一个程序,如果不导入任何外部模块或,就做不了什么。理解Python如何导入模块和将在几乎所有的场景中都很有帮助。...从哪里进口(import) 当使用import关键字导入时,Python会循环sys. path中路径列表。加载它路径。...如果你给一些东西命名,比如i, td,几周后,即使是你,这个程序作者也不明白这些变量含义。 所以, 规则1:明确。 Python作为一种脚本语言已经相对较慢了,为了使你程序更快,需要加载模块。...但是它将导入这个所有模块,在导入datetime情况下。...() az_意思是,它来自Andrew Zhu, _pkg表示它是从某处导入

1.2K10

Python3快速入门(四)——Pyth

顶级与入口文件 main.py 位置有关,与 main.py 同级顶级,因此main.py入口文件不属于任何。...4、相对导入 相对导入导入模块时指定被导入模块名称相对路径。 import 不支持相对导入,只能使用 from ... import ......格式实现相对导入, “ .  ..  ... ” 来表示相对路径,一个点表示当前,两个点表示上一级,以此类推。 入口文件中没有概念,因此不能使用相对导入。...使用相对导入不要超出顶级,入口文件同级都不能使用相对导入。...在main.py如果作为模块执行时,可以使用相对导入,此时使用如下命令执行: python3 -m main.py 5、绝对导入 绝对导入导入时必须指定从顶级到被导入模块名称完整路径,可以使用import

1K21

python已安装了一个,但是导入模块时报错没有这个

执行import sys; print(sys.path)查看python搜索路径,确保自己模块在python搜索路径中 python搜索路径与(package) python搜索路径其实是一个列表...,它是指导入模块时,python会自动去找搜索这个列表当中路径,如果路径中存在要导入模块文件则导入成功,否则导入失败: >>> import sys >>> sys.path ['', 'C:\\Python33...\\lib', 'C:\\Python33', 'C:\\Python33\\lib\\site-packages', 'E:\\python'] >>> 当安装第三方模块时候,如果不是按照标准方式安装...路径配置文件扩展名是”.pth”,其中每一行包含一个单独路径,该路径会添加到sys.path列表中(已验证)。”....pth”中路径既可以是绝对路径,也可以是相对路径,如果是相对路径,则是相对于包含”.pth”文件路径而言。 终极解决办法:重新安装python

5.5K10

Python模块和

,import 仍然不会报错,而在python2中, 下一定要有该文件,否则import 报错 创建目的不是为了运行,而是被导入使用,记住,只是模块一种形式而已,本质就是一种模块 为何要使用...绝对导入:以glance作为起始 相对导入:用.或者..方式最为起始(只能在一个中使用,不能用于不同目录内) 绝对导入: 以执行文件sys.path为起始点开始导入,称之为绝对导入 优点: 执行文件与被导入模块中都可以使用...缺点: 所有导入都是以sys.path为起始点,导入麻烦 相对导入: 参照当前所在文件文件夹为起始开始查找,称之为相对导入 符号: .代表当前所在文件文件加,..代表上一级文件夹,...代表上一级上一级文件夹...优点: 导入更加简单 缺点: 只能在导入模块时才能使用 注意: 相对导入只能用于内部模块之间相互导入,导入者与被导入者都必须存在于一个内 试图在顶级之外使用相对导入是错误,言外之意,必须在顶级内使用相对导入...,每增加一个.代表 跳到上一级文件夹,而上一级不应该超出顶级

76920

Python项目代码结构

,在其他代码中只需 import common即可批量添加类库 引入注意事项: 和模块不会重复导入,类似static代码块,只导入一次 避免循环导入 例如在模块A内 import B,在模块...和模块导入绝对和相对路径 顶级,与入口文件位置有关 顶级相对于入口文件以外文件来说, 对于一个项目,在入口文件中需要import 路径.模块名 而路径就关乎顶级正确确定 绝对引入...:import 路径.模块名 其中路径必须从顶级开始 相对引入:使用 from .module 表示引入同级模块 from ..module 表示引入上一层模块 注意: import...那么无法点引入,会报错 错误:尝试引用一个超过顶级模块 相对引入机制: 使用内置变量__name__来找到模块, 因此,入口文件name是‘_main_’,...所以如果想在‘入口文件这一层引入模块’,那么只能绝对引入 如果在‘入口文件上一层’,并使用 python -m module 仍然可以使用相对引入, 因为这种方式,文件仍然是入口文件

3.5K30

Python小技之自定义不同文件夹下模块导入问题

一般在写一个项目的时候, 为了将项目模块化, 更加清晰明了, 会将不同功能模块放入不同文件夹 项目如下: ├── spider │ └── spider.py # 爬虫文件 └── utils...spider.py内容如下: from ..utils.downloads import download download() 一切看起来都是那么美好 当你试图运行 问题一出现: cd spider python3...spider.py 会得到: # 相对导入超出顶级错误 Traceback (most recent call last): File "spider.py", line 7, in <module...utils.downloads import download ValueError: attempted relative import beyond top-level package 但是你试图把相对路径去掉时..., 又会得到: # 找不到这个模块 ModuleNotFoundError: No module named 'utils' 尝试解决: 在spider.py文件第一行加入: import sys sys.path.append

1.1K20
领券