我为什么需要

这个问题在这里已经有了答案:

  • 什么是__init__.py? 11个答案

  • 是的,如果您要将目录视为模块,则需要此文件。

    需要__init__.py文件才能使Python将目录视为包含包; 这是为了防止具有通用名称的目录(例如字符串)无意中隐藏稍后在模块搜索路径中发生的有效模块。 在最简单的情况下, __init__.py可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__变量,稍后介绍。

    https://docs.python.org/3/tutorial/modules.html#packages

    我尝试创建非空的__init__.py 。 通过在第一级提供最有用的对象(类/函数),您可以很好地记录模块,从而摆脱用户/开发人员的嵌套导入......实际上尽可能简单地使用与之相比 - 我们可以说 - java导入

    问题更新后编辑

    默认导入器/查找器(检查sys.meta_path )是:

  • BuiltinImporter - 搜索/加载内置模块
  • FrozenImporter - 搜索/加载冻结模块(例如* .pyc)
  • 路径查找器 - 您感兴趣的路径查找器允许根据文件系统搜索/加载模块
  • 第三个是__init__.py东西(实际上也是FrozenImporter)。

    PathFindersys.path (和包中定义的__path__ )中搜索PathFinder中的模块。 该模块可以是独立的python文件(如果它位于搜索路径的根目录中),也可以是具有__init__.py目录。

    参考你的例子:

    foo/
      bar/
        __init__.py
        baz.py
    
  • 如果您在foo/创建_init__.pyfoo.bar.baz将可用(如您所说)。

  • 如果你添加foo/sys.path或者通过PYTHONPATH=foo/传递它, bar.baz将可用(注意没有父模块foo)。

  • 如果你编写你自己的发现者(和Loader),你可以加载任何你想要的文件,而不管它在哪里。 这给了你强大的力量。 例如,看看stack-overflow-import ,根据SO的搜索结果公开代码。

  • 链接地址: http://www.djcxy.com/p/54809.html

    上一篇: Why do I need

    下一篇: What is the reason python needs