Python 3.4.1のローカルバージョンがあり、python -m pip install
が、実行するpipバイナリが見つかりませんpip install
。これら2つの違いは何ですか?
彼らはまったく同じことをします。実際、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
関数を呼び出すことになります。