2

人気のあるライブラリのコードを調べて、Python についてもっと学ぼうとしています。私が手を加えた最初のライブラリはpython-requestsKenneth Reitz によるものです。

私がしたことは単純git clone <request_repo_url_from_github>で、今はコードを調べています。

__init__.pyのファイルを調べていましたrequests/packages

いくつか質問があります。

  1. __init__.py内部にあるのはなぜですか?直下にファイルrequests/packagesがないはずです? それとも、これは github から直接クローンされてアンインストールされたパッケージであるため、このように簡単ですか?__init__.pyrequests

  2. 2 番目の質問は、以下の上記のコードに関するものです。私が知りたいのは、NullHandler正確に何をするのですか?私はドキュメンテーションhereを見ました。「ノーオペレーション」ハンドラーを持つとはどういう意味ですか。ライブラリ開発者はこのハンドラをどこで使用しますか? つまり、何が特別なのですか?


import logging
try:  # Python 2.7+
    from logging import NullHandler
except ImportError:
    class NullHandler(logging.Handler):
        def emit(self, record):
            pass
4

2 に答える 2

1
  1. ディレクトリ__init__.pyにファイルがあると、そのディレクトリが Python パッケージに変わります。サブディレクトリもパッケージに変換しません。ソース ツリーを見ると、次のようになっていることがわかります (関連のないファイルは削除されています)。

    requests/
    |
    |-- __init__.py
    |-- packages/
        |
        |-- __init__.py
        |-- charade/
        |   |
        |   |-- __init__.py
        |-- urllib3/
            |
            |-- __init__.py
    

    これにより、最上位パッケージ と、サブパッケージ および が定義さrequestsれます。これらのパッケージを適切にインポート可能にするには、これらのパッケージを定義する必要があります。requests.packagesrequests.packages.charaderequests.packages.urllib3

    あなたが尋ねた質問に直接答えるために、直下にファイルあります。ツリー全体に複数あります。__init__.pyrequests/

  2. NullHandler何もしません。loggingユーザーがロガーを構成していなくても、ライブラリへの呼び出しを無条件に使用できるように配置されています。基本的に、ログ ライブラリに接続されているすべてのロガーは、urllib3何かをログに記録しようとすると呼び出されます。ロガーがアタッチされていない場合、ログ ライブラリは警告を発します。これらはお粗末なので、これはユーザーにログインを強制せずにライブラリ コードを単純にするための回避策です。

于 2013-07-16T10:07:03.353 に答える