Help us understand the problem. What is going on with this article?

__init__.py を省略してはいけない

Python 3.3 から __init__.py を省略して良いと思っている人が多いですが、 省略しないでください。

なぜ勘違いが起こったのか

Python 3.3 から、 PEP 420 で Implicit namespace package が追加されました。

Namespace package とは普通の package ではありません。 特殊な用途のもので、ほとんどの人にとっては 知る必要すらない ものです。

どうしても知りたければ、上の PEP 420 と packaging guide を読んでください。

__init__.py を省略する弊害

普通の package で Implicit namespace package を乱用すると弊害があります。

import が遅くなる

通常の package とは違うので import が package 内のモジュールを探すのが遅くなる可能性があります。
また、確率は低いですがその探索順序の違いによってなにか問題が起こる可能性もあります。

ツールが対応していない

例えば標準ライブラリの unittest で test モジュールを自動で探す機能は __init__.py がないディレクトリの中を探しに行きません。 (https://bugs.python.org/issue29642 を参照)

もし対応しようとしたら、 __init__.py がないディレクトリも全部再帰的に探索しないといけなくなります。そのディレクトリは node_modules で数十万のファイルやディレクトリが入っているかもしれません。そのディレクトリがネットワークマウントされていたりしたらどれだけ遅くなるでしょうか。

Implicit namespace package を通常の package として 乱用するユーザーのためにそんな速度低下は到底受け入れられません。

同じ理由で lint 等のツールでも、自動でパッケージやモジュールを探すような機能が Implicit namespace package を探してくれると期待してはいけません。

背景を知らずに要望を受け入れて対応しているツールもあるかもしれませんが、「対応すべき」「対応しろ」というIssueやPull Requestを送るのはメンテナや他のユーザーに迷惑なのでやめましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした