当前位置: 首页 > 面试题库 >

Python 3.3+中的软件包不需要__init__.py吗

邵毅
2023-03-14
问题内容

我正在使用Python
3.5.1。我在这里阅读了文档和包部分:https
:
//docs.python.org/3/tutorial/modules.html#packages

现在,我具有以下结构:

/home/wujek/Playground/a/b/module.py

module.py

class Foo:
    def __init__(self):
        print('initializing Foo')

现在,在/home/wujek/Playground

~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>

同样,现在在家里,超级文件夹Playground

~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>

实际上,我可以做各种事情:

~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b

为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并bmodule.py要导入的时候Python的路径指向Playground文件夹?

这似乎与Python 2.7有所不同:

~ $ PYTHONPATH=Playground python
>>> import a
ImportError: No module named a
>>> import a.b
ImportError: No module named a.b
>>> import a.b.module
ImportError: No module named a.b.module

随着__init__.py在这两个~/Playground/a~/Playground/a/b它工作正常。


问题答案:

Python
3.3+具有隐式命名空间包,允许它创建不带__init__.py文件的包。

允许隐式命名空间包意味着 可以完全放弃 提供__init__.py文件的要求,并 使其 受到影响。

使用__init__.py文件的旧方法仍然可以在Python 2中使用。



 类似资料:
  • 我正在使用Python 3.5.1。我在这里阅读了文件和文件包部分:https://docs.python.org/3/tutorial/modules.html#packages 现在,我有以下结构: : 现在,在: 同样,现在在家里,: 事实上,我可以做各种各样的事情: 为什么这行得通?我认为需要有文件(空的可以工作)在两个和中,当Python路径指向文件夹? 这似乎与Python 2.7有所

  • 最近我创建了一个flask应用程序,并决定在应用程序文件夹外添加一个测试文件夹(应用程序文件夹和测试文件夹都在同一个目录中)。我要测试的所有实现都包含在app文件夹中创建的包和模块中。 在两个文件夹中都有_init__u; py.py文件,正如预期的那样工作正常。但是,当我从测试文件夹中删除_uinit__uuu.py文件时,我开始体验moduleImportError。PythonDoc说,Py

  • init.py

  • init.py 指定导入该包时,仅导入 Client 类,代码如下: __all__ = ['Client'] from heatclient.v1.client import Client

  • 问题内容: 我在理解项目中python文件的使用场景或设计目标时遇到了困难。 假设我有“模型”目录(称为包),其中包含以下文件 我发现了两种使用方法: 我有需要使用一个共同的定义,,。我可以用作所有* model.py类的基础/通用定义吗?这意味着我必须导入。 或者,应当具有自己导入的solrmodel.py,mongomodel.py,samodel.py的定义,并且它允许像这样的类或函数的轻松

  • 问题内容: 我的软件包具有以下结构: 我不确定应如何正确写入文件。 的样子: 但是例如应该看起来如何?我的是: 什么时候应该使用? 问题答案: 很好-它有助于指导导入语句,而无需自动导入模块 http://docs.python.org/tutorial/modules.html#importing-from-a- package 使用和是多余的,仅需要 我认为在导入软件包中使用的最强大的理由之一