【问题标题】:python module layoutpython模块布局
【发布时间】:2011-05-06 11:11:19
【问题描述】:

我刚刚开始在我的 python 项目中指出我需要开始使用多个包,但我对所有东西应该如何协同工作有点困惑。包的__init__.py 究竟应该包含什么?我看到的一些项目只有空白的初始化,它们的所有代码都在该包的模块中。其他项目似乎在 init 中实现了包的大部分类和函数。

是否有文档或样式指南或其他内容描述了 Python 作者对使用包和 __init__ 文件等的想法?

编辑:
我知道拥有__init__.py 文件最简单的意义在于它使文件夹成为一个包。但是为什么我要在同一个文件夹(包)中放一个函数而不是一个模块呢?

【问题讨论】:

    标签: python python-module


    【解决方案1】:

    __init__.py 可以为空,但它真正的作用是确保 Python 正确处理您的目录,提供导入包时可能需要的任何初始化(配置环境或类似的东西),或定义 @ 987654324@ 以便 Python 在有人使用 from package import * 时知道该怎么做。

    docs on Packages 中描述了您需要了解的大部分内容。 Dive Into Python also has a piece on packaging.

    【讨论】:

      【解决方案2】:

      你已经知道了,我猜需要 __init__.py 文件才能让 Python 将目录视为包含包。

      1. 在上述模型中,__init__.py 可以保持为空。

      2. 也可以执行包的初始化代码。

      3. 您还可以设置 __all__ 变量。

      [编辑:学习] 当你执行“from package import item”或“from package import *”时,可以使用变量__all__来导入选定的包。

      见:http://docs.python.org/tutorial/modules.html

      【讨论】:

      • __init__.py, __all__。双下划线
      • @Rafe Kettler:谢谢。是的,编辑问题。我的答案和你的一样,在发布之前我没有看到。
      • 对于from package import item,变量__all__ 不控制暴露的内容。如果item 是模块或子包,并且您在Windows 上,__all__ 可能控制item 的大小写,但它不控制您可以访问的内容。
      • @SvenMarnach:all 主要用于通配符导入。它不尝试提供任何形式的访问控制。详情请见docs.python.org/tutorial/modules.html#importing-from-a-package
      猜你喜欢
      • 2013-07-26
      • 2012-03-08
      • 2018-01-22
      • 2018-06-21
      • 2013-02-02
      • 2013-10-25
      • 2011-03-30
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多