【问题标题】:Python modules vs packagesPython 模块与包
【发布时间】:2021-07-03 16:38:50
【问题描述】:

我正在阅读一个文档,我遇到了下面的部分:

​模块​无非就是一个目录,里面有​__init__.py​文件。它应该包含具有与模块用途相关的逻辑的其他 Python 文件。

这个定义正确吗?

(据我所知,Python 模块是一个文件,其扩展名为 py,其中包含 Python 代码。我记得一个包含 dunder init(__init__.py) 文件的目录称为 Python 包。)

【问题讨论】:

  • 一个包也是一个模块,我可以通过名字来导入它。我认为这个定义有点草率,因为它不允许单文件模块。
  • Python docs 可能会有所帮助
  • 两个定义都不好。模块不需要是 .py 文件(例如可以是 .so),包不需要是磁盘上的目录(例如可以是 zip 文件)。模块和包可以在内存中动态创建,并且可能根本不存在于文件系统中。命名空间包是一种没有任何__init__.py的Python包。

标签: python python-module python-packaging


【解决方案1】:

定义不正确。

虽然“包”也是“模块”,但单个“.py”文件本身包含: 一个模块,不需要是一个目录,或者里面有一个__init__ 文件。

另一方面,是的,一个包通常是(并定义为)一个包含__init__.py 和可选其他文件的目录。

(但是包可以以其他格式呈现,例如 .egg 或 zip 文件,甚至是具有相应自定义导入机制的自定义格式,它们是可插入的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 2017-03-25
    相关资源
    最近更新 更多