web-dev-qa-db-ja.com

「pip install」と「python -m pip install」の違いは何ですか?

Python 3.4.1のローカルバージョンがあり、python -m pip installが、実行するpipバイナリが見つかりませんpip install。これら2つの違いは何ですか?

34
ilciavo

彼らはまったく同じことをします。実際、Pythonモジュールを配布するためのドキュメントは ちょうど更新されました であるため、pip実行可能ファイルの代わりにpython -m pip pythonのどのバージョンが実際にpipをそのように実行するために使用される予定かを判断するために。

編集:

これは、Wordとリンクしたバグレポートを信頼するだけでなく、より具体的な「証明」です。

pip実行可能スクリプトを見ると、次のようになっています。

from pkg_resources import load_entry_point
<snip>
load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()

関数を返す load_entry_point を呼び出してから、その関数を実行します。使用しているエントリポイントは'console_scripts'と呼ばれます。 pip(/usr/lib/python2.7/dist-packages/pip-1.5.4.Egg-info/entry_points.txtのUbuntuマシン上のentry_points.txtファイルを見ると、これが表示されます:

[console_scripts]
pip = pip:main
pip2.7 = pip:main
pip2 = pip:main

したがって、返されるエントリポイントは、mainモジュールのpip関数です。

python -m pipを実行すると、pipパッケージ内で__main__.pyスクリプトが実行されます。次のようになります。

import sys
from .runner import run

if __name__ == '__main__':
    exit = run()
    if exit:
        sys.exit(exit)

runner.run関数は次のようになります。

def run():
    base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    ## FIXME: this is kind of crude; if we could create a fake pip
    ## module, then exec into it and update pip.__path__ properly, we
    ## wouldn't have to update sys.path:
    sys.path.insert(0, base)
    import pip
    return pip.main()

ご覧のとおり、pip.main関数も呼び出しているだけです。したがって、両方のコマンドはpip/__init__.pyで同じmain関数を呼び出すことになります。

37
dano