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

为什么有顶层目录的导入可以在没有init的Python中工作?

顶层目录的导入可以在没有init的Python中工作的原因是因为Python解释器在搜索模块时会按照一定的规则进行搜索,其中之一就是会搜索sys.path列表中的路径。sys.path列表中的第一个路径是空字符串,表示当前目录,而顶层目录的导入就是基于当前目录进行搜索的。

当我们在没有init的Python文件中进行顶层目录的导入时,Python解释器会先搜索当前目录,然后再搜索sys.path列表中的其他路径。因此,如果我们的顶层目录位于当前目录或者sys.path列表中的某个路径下,那么导入操作就可以正常工作。

需要注意的是,这种方式的导入可能会导致一些问题,例如命名冲突、模块路径的不确定性等。为了避免这些问题,通常建议在项目中使用包的形式进行模块的组织和导入,即在顶层目录下添加一个init文件,并将相关模块放在子目录中,这样可以更好地管理和组织代码。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数(云原生无服务器函数计算服务):https://cloud.tencent.com/product/scf
  • 腾讯云对象存储(云原生对象存储服务):https://cloud.tencent.com/product/cos
  • 腾讯云数据库(云原生数据库服务):https://cloud.tencent.com/product/cdb
  • 腾讯云容器服务(云原生容器化服务):https://cloud.tencent.com/product/tke
  • 腾讯云人工智能(云原生人工智能服务):https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python绝对导入和相对导入

Python import 搜索路径在当前目录下搜索该模块环境变量 PYTHONPATH 中指定路径列表依次搜索 Python 安装路径 lib 库搜索Python import 步骤python...所有加载模块信息都存放在 sys.modules 结构,当 import 一个模块时,会按如下步骤来进行如果是 import A,检查 sys.modules 是否已经 A,如果有则不加载,如果没有则为...所谓包,就是包含 __init__.py 文件目录,该文件导入时会被首先执行,该文件可以为空,也可以在其中加入任意合法 Python 代码。相对导入可以避免硬编码,对于包维护是友好。...有人可能会问:假如有两个模块 a.py 和 b.py 放在同一个目录下,为什么能在 b.py import a 呢?...这是因为这两个文件所在目录不是一个包,那么每一个 python 文件都是一个独立可以直接被其他模块导入模块,就像你导入标准库一样,它们不存在相对导入和绝对导入问题。

4K21

python之模块和包

4 if name== 'main': 用途 1 本模块功能测试 测试本模块内函数,类 2 避免主模块变更副作用 顶层代码,没有封装,主模块使用没有问题,但是,一旦了新主模块,当前模块要被导入...结论: 使用频率高文件,使用频率多应该放置_init_.py,因为模块初始化过程总会加载目录_init_.py文件及其中内容,但其不会执行和导入其他相关子模块 ---- 若目录对应...: 1 包能够更好组织模块,尤其是大规模代码很多,可以拆分成很多子模块,便于使用某些功能就加载相应目录 ---- 包目录_init_.py是包在第一次导入时就执行,内容可以为空,也可以是用于该包初始化工作代码...顶层目录导入子模块 ? 进行在test模块中导入并查看 ?...,哪怕是导入子模块,或者导入下划线开头名称,程序员可以控制和导入名称和其对应对象 7 模块变量修改 w1 _init_.py定义一个参数z ?

1.4K10

Python学习笔记整理(十三)Pyth

程序是作为一个主体顶层文件来构造,配合零个或多个支持文件,Python这些文件称作模块。...模块命令空间包含了代码模块文件顶层赋值所有变量名(也就是没有嵌套与def和class语句中) 二、模块代码编写基础 1、模块创建和使用。...dir1容器目录dir0,dir0这个目录可以Python模块搜索路径中找到。...dir1和dir2必须包含__init__.py,容器目录dir0不需要这类文件。因为本身没有import语句中 __init__.py文件可以包含程序代码,也可以是空。...*模块命名空间初始化: *from * 语句行为: 作为一个高级功能,可以__init__.py文件中使用__all__列表来定义目录以form *语句形式导入时,需要 导出什么。

1.6K50

python module manage

python允许“导入”其它模块以实现代码重用,从而也实现了将独立代码文件组织成更大程序系统。python,模块也是对象;一个模块顶层定义所有变量都在被导入时成为了被导入模块属性。...模块可内含变量、函数以及类来进行其工作,而函数和类可以包含变量和其它元素。     建议:顶层文件可以出现大量控制流语句,而其它被调用文件仅包含变量、函数及类,这样程序执行时效率才会高。...Python包     包用于将一组模块归并到一个目录,此目录即为包,目录名即为包名。包是一个层次文件目录结构,它定义了一个由模块和子包组成python应用程序执行环境。...基于包,python执行模块导入可以指定模块导入路径。     ...导入可以执行:import package1.mod1 即可     包导入语句路径内每个目录内都必须有__init__.py文件。

64010

Python包与模块导入问题

: No module named 'testpkg' 一个是不能导入顶层超过顶层层次包,一个是找不到模块 网上介绍和测试 1、https://www.cnblogs.com/linkenpark...1、使用相对路径导入导致顶级层次报错,python以当前运行脚本所在目录作为顶层层次,比如运行run.py时,A\B都是顶级层次,不能跨越顶级层次引用包或模块!...、每个项目应该只有一个能独立运行py文件,这是项目的主函数入口,该文件应该位于项目的最外层,这样的话运行时顶级层次最高,可以导入项目所有的模块和包了 2、项目内部可能分了很多模块来组织功能,但是内部模块一般不能独立运行...单独执行内部模块文件时,可能会因为跨目录导入模块导致运行出错。...3、如果内部模块一定要跨顶级层次导入,则应该使用sys.path.append来将路径添加到python包查找路径 4、遇到类似问题,非常轻易定位,第一步分析当前顶级层次,是否跨顶级层次导入

2.4K40

python之基础篇(八)——模块与包

python允许"导入"其它模块以实现代码重用,从而也实现了将独立代码文件组织成更大程序系统:     python,模块也是对象     一个模块顶层定义所有变量都在被导入时成为了被导入模块属性...模块执行环境:     模块是被导入,但模块也可以导入和使用其它模块,这些模块可以python或其它编程语言写成     模块可内含变量、函数以及类来进行其工作,而函数和类可以包含变量和其它元素...包是一个层次文件目录结构,它定义了一个由模块和子包组成python应用程序执行环境     基于包,python执行模块导入可以指定模块导入路径,如:       import dir1.dir2...使用以下命令导入:     import package1.mod1   包导入语句路径内每个目录内都必须有__init__.py文件:     __init__.py可包含python代码,但通常为空...          常用于普通用户,因为普通用户对某些目录没有写权限         --prefix=:指定python安装路径           要对指定目录写权限         -

2.3K30

Python 学习入门(35)—— 模块

然后,我们通过F:\Pro-files\workspace\myPython\com\homer目录进入到python命令行模式,这样就可以将当前目录作为工作目录,从而也就可以顺利找到了module...对于每个模块导入python解释器只会导入一次,即使重复使用import和from…import语句,也只有PVM检测到该模块没有导入时才执行导入动作。...即使后来你修改了模块源代码,但没有重启PVM,python解释器仍然是使用之前导入内容处理。...PVM导入某个包下模块时会先导入这个包下__init__.py模块,比如我们__init__.py模块里添加内容: print("This is __init__ module") 然后,交互模式下重新导入这个包...python模块搜索路径 一个模块被导入时,PVM会在后台从一系列路径搜索该模块,其搜索过程如下: 1、在当前目录下搜索该模块; 2、环境变量PYTHONPATH中指定路径列表依次搜索;

72420

pythonimport星_Python imports 指北

参考链接: 为什么Pythonimport星号*是个坏主意 声明:如果你每天写Python,你会发现这篇文章没有新东西。...初始化是导入时触发,换句话说,导入包时调用__init__.py当你导入一个包时,包内__init__.py模块被执行 __init__模块,你可以做任何你想做事情,但最常用是用于一些包初始化或设置专用...后者控制*(通配符)导入 - from package import *。 而且因为Python很棒,我们可以__init__模块做很多事情,甚至是很奇怪事情。...为此,我们可以__init__.py像这样导入menu和pizza模块所有东西 # pizzapy/__init__.py from pizzapy.pizza import * from pizzapy.menu...人们实际上这样做,虽然这是一个糟糕方式。 结束语 我希望阅读这篇文章之后,你将会对Python导入更好理解,并且可以最终顺利地将你工具箱巨大脚本分解成多个部分。

1.1K00

Python基础】08、Python

一个模块顶层定义所有变量都在被导入时成为了被导入模块属性 2、python程序架构  一个Python程序通常包含一个顶层程序文件和其它模块文件(0个,1个或多个)         顶层文件...    模块可内含变量,函数以及类来进行其工作,而函数和类可以包含变量和其它元素 4、导入模块      导入模块时只能使用模块名,而不能使用带.py后缀模块文件名  import语句:      ...,启动时,__name__值为“__main__”                如果是被导入,则__name__值为模块名 可以模块检测自己__name__属性,以之实现在执行时运行指定代码.../mymod.py  60 30 Hello Myclass jerry 二、python包 1、python包 包用于将一组模块归并到一个目录,此目录即为包,目录名为包名       包是一个层次文件目录结构...,则py_pkg_mod容器必须要在模块搜索路径 import package1.mod1 包导入语句路径内每个目录内都必须有__init__.py文件        __init__.py可包含

1.7K10

Python3学习笔记 | 二十二、Python模块-模块宏伟蓝图

为什么使用模块 代码重用: 模块可以文件永久保存代码。我们可以按照需要任意次数地重新载入和重新运行模块。模块还是定义变量名空间,被认作是属性,可以被多个外部客户端引用。...当发现已有字节码,并更新时间比源码新,不会生成新字节码。但是源码更新时间比字节码新,或者没有字节码,就会生成新字节码。当没有源码,只有字节码时候,也可以导入。 这个编译过程,只导入时进行。...当你运行程序时候,这个入口是包含程序顶层脚本文件目录。当在交互模式工作时,这个入口就是你当前工作目录。...4、.pth文件目录Python3.x) Python一个相当新功能,允许用户把有效目录添加到模块搜索路径中去,也就是文件名后缀为.pth文件。...此文件可以放在: WindowsPython安装目录顶层(例如C:\Python3.x\)或者标准库所在位置sitepackages子目录(例如C:\Python3.x\Lib\sitepackages

70420

Python模块介绍和使用1.import2.from…import3.from … import *4.as5.定位模块6.模块制作7.模块__all__8.python包9.

变量里包含当前目录,PYTHONPATH和由安装过程决定默认目录。 6.模块制作 1.定义自己模块 Python,每个Python文件都可以作为一个模块,模块名字就是文件名字。...总结: ·可以根据__name__变量结果能够判断出,是直接执行python脚本还是被引入执行,从而能够选择性执行测试代码 7.模块__all__ 1.没有__all__ ? ? ?...__.py文件什么用 __init__.py控制着包导入行为 可以__init__内添加导入功能 比如from ab import a 3__init__.py为空 仅仅是把这个包导入,不会导入模块...6.扩展:嵌套包 假定我们例子有如下目录结构: ? Phone是最顶层包,Voicedta等是它子包。 我们可以这样导入子包: ?...事实上,你可以一直沿子包树状结构导入: ? 我们上边目录结构,我们可以发现很多__init__.py文件。这些是初始化模块,from-import语句导入子包时需要用到它。

96310

Python各个模块介绍和使用

变量里包含当前目录,PYTHONPATH和由安装过程决定默认目录。 6、模块制作 1、定义自己模块 Python,每个Python文件都可以作为一个模块,模块名字就是文件名字。...总结:可以根据__name__变量结果能够判断出,是直接执行python脚本还是被引入执行,从而能够选择性执行测试代码。 7、模块_all_ 1、没有__all__ ? ? ?...2、__init__.py文件什么用 __init__.py控制着包导入行为 可以__init__内添加导入功能 比如from ab import a 3、__init__.py为空 仅仅是把这个包导入...6、扩展:嵌套包 假定我们例子有如下目录结构: ? Phone是最顶层包,Voicedta等是它子包。 我们可以这样导入子包: ?...事实上,你可以一直沿子包树状结构导入: ? 我们上边目录结构,我们可以发现很多__init__.py文件。这些是初始化模块,from-import语句导入子包时需要用到它。

1.5K80

python历险记之模块导入

最近在学习用 python3 写测试用例,导入包和模块踩到了坑。在网上找资料,发现不太全面,有些还有错漏。于是决定自己总结,希望也能给遇到问题小伙伴们带来帮助。...模块可以在其他 python 文件中被导入和使用。 包 包含多个模块文件夹,导入该包即导入该包内模块。必须有 __init__.py文件。...__init__.py 文件:导入某个包时,会首先执行__init__.py 文件,因此可以在里面先行导入需要用到模块或者模块内定义、方法。...绝对路径 使用 xxx.yyy.zzz 导入。以当前包目录顶层目录。...from xxx import yyy 方式说明 若在包 package_a __init__.py 文件引入了其下具体类、函数,则在引用 pakcage_a 可以直接引用;若没有,则 xxx

18710

Python imports指南

我们pizza模块,我们一个可能与其他Pizza包相冲突Pizza类(我们pypi上有一些pizza包) 第二种情况是,如果你想分发你代码,因为 包是Python中最小代码分发单元 你...初始化是导入时触发,换句话说,导入包时调用__init__.py 当你导入一个包时,包内__init__.py模块被执行 __init__模块,你可以做任何你想做事情,但最常用是用于一些包初始化或设置专用...后者控制*(通配符)导入 - from package import *。 而且因为Python很棒,我们可以__init__模块做很多事情,甚至是很奇怪事情。...为此,我们可以__init__.py像这样导入menu和pizza模块所有东西 # pizzapy/__init__.py from pizzapy.pizza import * from pizzapy.menu...结束语 我希望阅读这篇文章之后,你将会对Python导入更好理解,并且可以最终顺利地将你工具箱巨大脚本分解成多个部分。

96850

Python模块(Module)和包(Package)区别

模块(Module) 计算机程序开发过程,随着程序代码越写越多,一个文件里代码就会越来越长,越来越不容易维护。...Python,一个.py文件就称之为一个模块(Module)。 使用模块什么好处? 最大好处是大大提高了代码可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。...方法是选择一个顶层包名,比如mycompany,按照如下目录存放 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py  引入了包以后,只要顶层包名不与别人冲突,...__init__.py可以是空文件,也可以Python代码,因为__init__.py本身就是一个模块,而它模块名就是mycompany。 类似的,可以多级目录,组成多级层次包结构。...如果启动Python交互环境,再导入hello模块: >>> import hello >>> 导入时,没有打印Hello, word!,因为没有执行test()函数。

1.6K110

python高级-包(15)

_init_ _.py文件 _ _init_ _.py控制着包导入行为 _ _init_ _.py为空,意味着仅仅把这个包导入,不会导入模块 _ _init_ _.py文件,定义一个_ _all..._ _变量,它控制着from包名import*是导入模块 可以_ _init_ _.py文件编写内容,当导入时,这些语句就会被执行 __init__.py模块 __all__ = ["send",...c2.py sub_D/#包D __init__.py d1.py d2.py A是最顶层包,sub_B等是它子包,我们可以这样导入子包: import...此外,我们可以还引用更多子包: from A.sub_B import b1 事实上,你可以一直沿子包树状结构导入 我们上边目录结构,我们可以发现很多 __init__.py 文件。...,执行目录安装,可以使用python setup.py install –prefix=安装路径 2、模块引入 程序,使用from import 即可完成对安装模块使用 from 模块名 import

57710

Python

Python包 包用于将一组模块归并到一个目录,此目录即为包,目录名即为报名 包是一个层次文件目录结构,它定义了一个由模块和子包组成Python应用执行环境 基于包,Python执行模块导入可以指定模块导入路径..._init_.py文件 _init_.py可包含python代码,但通常为空,仅用于扮演包初始化挂钩、替目录产生模块命名空间以及使用目录导入时实现from * 行为角色 模块顶层执行及被导入 一个模块文件可以同时支持顶层执行...(作为顶层文件)或被导入(作为模块文件) 每个模块都有一个_name_内置属性,Python会自动设置该属性 如果文件是以顶层程序文件执行,启动时,_name_值为"_main_" 如果是被导入,...构建、打包和发布模块 2创建好发布可以用于安装,也可上传到pypi与他人共享 创建发布 将各代码问价组织到模块容器 3.准备一个Readme或reamde.txt文件 而后容器创建setup.py...4完成打包 在要发布容器目录执行“python setup.py sdist --format= ”命令 // 目标包 //可以为sdist指定格式(--format=):zip/gztar/

2.4K100

trick(二)、if __name__ == ‘__main__‘

也就是从脚本第一行开始运行,没有统一入口。一个Python源码文件(.py)除了可以被直接运行外,还可以作为模块(也就是库),被其他.py文件导入。...不管是直接运行还是被导入,.py文件顶层代码都会被运行(Python用缩进来区分代码层次),而当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行。...假设我们一个包a,包结构如下: a ├── b │ ├── c.py │ └── __init__.py └── __init__.py 包a,文件c.py,__init__.py,__...由此可见,__name__可以清晰地反映一个模块层次。...使用python package运行,输出结果: __main__ ['package', ...] 5、总结 总结一下 当加上-m参数时,Python会把当前工作目录添加到sys.path;而不加-

17320

python工程结构

import sample 然后,每一个测试文件导入: from .context import sample 这样就能够像期待那样工作,而不用采用安装方式。...一旦找到 modu.py,Python解释器将在隔离作用域内执行这个模块。所有顶层 语句都会被执行,包括其他引用。方法与类定义将会存储到模块字典。...该语句会在 pack 目录下寻找 init.py 文件,并执行其中所有顶层语句。以上操作之后,modu.py 内定义所有变量、方法和类pack.modu命名空间中均可看到。...在这种情况下,导入多层嵌套 子包某个部件需要执行所有通过路径里碰到 init.py文件。如果包内模块和子包没有代码共享需求,使用空白 init.py 文件是正常甚至好做法。...动态类型 Python是动态类型语言,这意味着变量并没有固定类型。实际上,Python变量和其他语言很大不同,特别是静态类型语言。

88220
领券