【问题标题】:Under which circumstances __init__.py runs?__init__.py 在什么情况下运行?
【发布时间】:2017-09-14 09:47:26
【问题描述】:

我在当前目录中有__init__.py 文件。

我需要一份完整的情况列表,在这些情况下该文件将运行。

第一种情况是

import __init__

写在script.py同目录下并运行此文件。

还有哪些情况?

【问题讨论】:

  • import __init__ 真的很奇怪。也许你想要import . as …?想要“运行”一个模块而不是使用它的内容,这表明设计不好,但是(对导入有副作用的模块很糟糕)。考虑编写一个函数,导入 (from . import main),然后调用它。
  • 我已将此标记为不清楚。你已经说了你不想写的,但是你想写什么做什么?你想达到什么目的?你能写一个最小的工作示例吗?
  • 不,你实际上不想那样。
  • 你认为你想做的一切都是错的,所以把它删掉。做一个包。使用基于脚本包名称的绝对导入,或者完全跳过它并通过python -m 运行。不要惹sys.path。

标签: python packages


【解决方案1】:

__init__.py 文件在导入对应的包时运行。所以当你import some_package 时执行一个文件some_package\__init__.py。从包中导入子模块时,首先加载包。所以import aa.bb.cc,将在加载aa.bb和aa.bb.cc之前加载aa(并因此执行aa/__init__.py)。

文件夹some_package 必须是可发现的,这意味着它必须存在于sys.path 文件夹之一中。这包括当前目录。

如果您只是运行一个脚本 (python some_script.py) 并且恰好在同一个文件夹中有一个 __init__.py 文件,那么这没有任何意义,因为当前文件夹本身并不是一个包。 (当然,除非您执行的脚本恰好位于包中)。

【讨论】:

  • 一个额外的:如果你想能够运行包,你可以构造一个 main.py 文件(见here)
猜你喜欢
  • 1970-01-01
  • 2016-04-30
  • 2013-08-22
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
相关资源
最近更新 更多