質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

Q&A

3回答

1114閲覧

python -m pip installとpip installの違いについて

ararar

総合スコア0

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pip

pipとは、Pythonを用いて書かれているパッケージソフトのインストールや管理を行うためのパッケージマネジメントシステムです。pipを使う主なメリットは、コマンドラインインターフェースにて容易にPythonパッケージソフトをインストール可能だという点です。

0グッド

0クリップ

投稿2022/12/25 15:39

pipには下記の2種類がありますよね?(python3だったりpip3だったりもしますが)

A:python -m pip install <Package>
B:pip install <Package>

Aのこのpythonの-mオプションは下記のようにpythonのモジュール(パッケージ)を実行するために使うオプションという事ですが
python -m <module-name>
という事はpipはpythonのモジュールでpip.pyという事なのかなと思ったのですが
例えばGoogle ColaboratoryのJupyter Notebook環境(IPython? JupyterLab?)だとBの方は先頭に!マークを付けないと実行できないですよね?
という事は前者のpipはpythonモジュール(関数が記述された.pyファイルでpythonスクリプト?)で、後者のpipはLinuxコマンド(Shellコマンド?.shファイルでshellスクリプト?)で別物だったりするんでしょうか?
それともBの方はpipと先頭に書いたら環境がpython -mを省略していると判断して補完してくれるような仕組みになっていたりするんでしょうか?

下記のようなコードをnotebookセルで実行すると場所が表示されますが、これはこのpipがモジュールである事も示していますか?
import pip
print(pip.file)
print(pip.path)
一方でこのコードセルだと一つ前とは違う場所が表示されますが、これはこのpipがコマンドで一つ前のモジュールとは異なる事も示していますか?
!which pip

またAの先頭のpython自体はShellコマンドの一種という事になるのでしょうか?
また「コマンド」というのは(カーネルに関連する)ShellにしかないものでLinux/Windows/Macのコマンドというのはあっても(カーネルではない)「Pythonのコマンド」(先述のAの中のpythonとかではなく)というのは存在しない概念になるのでしょうか?

またimport pipのようなものはimport文と言われていますがこのimport文はモジュールやコマンドといった括りの中に入るのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

うまく質問の意図を汲み取れているかわかりませんが、内容の整理という意味もこめて回答させてください。

  • Q: 以下の、2 種類のコマンドの違いは何か?

    1. python -m pip install <Package>
    2. pip install <Package>

    A: 実行される pip の種類が違います。1 は、ご指摘の通り、lib/site-package/pip/__init__.py が実行されます。2 は、Scripts/pip.exe が実行されます。

  • Q: Jupyter Notebook 環境で、! を付けて実行した際に、呼び出される pip はどちらか?

    A: 2 の Scripts/pip.exe です。! をつけてセルを実行するとシェルコマンドをシェルに渡して実行できるという IPython の機能です。

    https://ipython.readthedocs.io/en/stable/interactive/tutorial.html#system-shell-commands

  • Q: 次のコードをセル内で実行すると場所が表示されるが、これはこの pip がモジュールであることを示しているか?

    python

    1import pip 2 3 4print(pip.__file__) 5print(pip.__path__)

    A: はい。これは、1 のモジュールとしての pip が動いてます。

  • Q: !which pip で表示される場所が前述の場所と違うが、この pip はコマンドで、前述の pip とは異なるものであることを示しているか?

    A: はい。pip モジュール本体は、pip という名の付いた実行ファイルを持たないため、whichコマンドでそのモジュールの場所が表示されることはありません。そのため、pip.exe の場所が表示されます。

  • Q: 1 の先頭の python 自体は シェルコマンドの一種という事になるか?

    A: 当方ゴリゴリの Windows ユーザーであり、シェルコマンドについて詳しくないため回答は控えさせてもらいます。しかしながら、質問者さんは恐らくシェルスクリプトやシェルコマンド、また一般的な概念のコマンドとの区別がついておらずごっちゃになっているような気もします。1 の python は実行ファイルの Python/Scripts/python.exe であるというだけです。それをシェルで実行しているので、その意味ではこれはコマンドだと思います。

  • Q: import pip のようなものは import 文と言われているがこの import 文はモジュールやコマンドといった括りの中に入るのか?

    A: すみません、いまいちこの質問の意図が汲み取れなかったのですが、Python のスクリプトとしての import pip について言及されているのであれば、それはスクリプトの一部であるとしか言えないと思います。この文章そのものはモジュールでもコマンドでもありません。あえて言うならば、コードだと思います。

投稿2022/12/25 19:22

Demerara

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

なんだかいろいろな質問がつまっていますが、 2つ答えてみます。

またAの先頭のpython自体はShellコマンドの一種という事になるのでしょうか?

shellと言うからには、linuxのことを言っているのだと思いますが、他のOSもだいたい同じです。
詳しい説明が以下のサイトに書いてありますので、一読をお勧めします。
http://www.cc.kyoto-su.ac.jp/~hirai/text/shell.html#commandinterpreter

まず、Shellというのは何でしょう? これは、OSと人の間に入って、コマンドの実行をサポートするプログラムのことです。
コマンドを打つと、それを解釈して、そのとおりに実行してくれます。

shell

1python hoge.py 2ls -ltr 3cat huga*.log | grep 20221226 | awk '{print($2)}' | sort -u > user_list_today

これらの入力は、OSが直接実行しているのではなく、shellが解釈してうまく実行できるようにOSに渡しています。ものによってはプログラムでなくshell自身が持っているコマンドだったりします。

このとき、実行されるのは先頭にある実行ファイルです。

  1. OSが直接実行できるもの。
  2. スクリプトファイル

に分けられます。 shellは先頭にある実行ファイルをコマンドパスから探します。その実行ファイルが1であれば、 その実行ファイルに引数を渡して起動します。
2の場合、先頭から読み始め、内容をshellコマンドとして実行します。
ただし、このとき特殊な機能として、 「#!」で始まる行は 、 そのスクリプトを解釈して実行するインタープリタの指定として扱うことになっていて、 それがあると、指定さえrているインタープリタにスクリプトと引数を渡します。

python -m pip installとpip installの違い

この2つは、 まずは指定されているプログラムが異なります。
どちらも「pip でモジュールを install」を実行しますが、 python と pip は別のプログラムなので、結果として同じバージョンのものが起動されるとは限りません。
たとえば、 python 2.7 と python 3.9 がインストールされていて、 pythonとしたときは2.7のものが実行されるけれども、 pipは 3.9 の方が実行される。 というようなことはありえます。

投稿2022/12/26 02:10

TakaiY

総合スコア12657

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Pythonのパッケージ管理のためのパッケージの名前であり、パッケージ管理のためのコマンドラインツールの名前でもあります。


例えばLinuxで「pyenvを使ってビルドしたCPython」の中にある実行コマンドpipはシェルスクリプトです。その中身(ただのテキストファイル)を見てみると

#!/home/xxxxx/.pyenv/versions/3.10.5/bin/python3.10 # -*- coding: utf-8 -*- import re import sys from pip._internal.cli.main import main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(main())

と書いてあります。
1行目で/home/xxxxx/.pyenv/versions/3.10.5/bin/python3.10というPythonインタプリタを使えと指定してあります。そのPythonを使って、pipパッケージからpip._internal.cli.main.mainを実行するようになってるわけです。


python -m pip-mオプションでパッケージを指定すると、pip.__main__モジュールが実行されるので

from pip._internal.cli.main import main as _main sys.exit(_main())

に行き着きます。


Windowsだとpipが実行バイナリ(pip.exe)になっていて多少事情は違いますが、やっていることは変わりないじゃないかなと思います。そこには「このPythonインタプリタで、pipパッケージのコマンドラインインタフェースを起動しろ」という内容になっているハズです。


結局の所、「パッケージpipの中にある pip._internal.cli.main.main」がコマンドとしてのpipのエントリポイントで、pipコマンドもpython -m pipもそれを実行するだけです。(機能はpipパッケージに散らばって存在していると思います)


/home/xxxxx/.pyenv/versions/3.10.5/bin/python3.10
を使う時、
/home/xxxxx/.pyenv/versions/3.10.5/lib/python3.10/site-packages
にサードパーティーのパッケージ群は置かれるようになっています。
「パッケージ管理のためのパッケージ」であるpipもここに置かれます。ここに置かれたパッケージpipが管理するのもここです。


*nix でもWindowでも、「システム内に入っているどのPythonで動くか?」が決まっているのがコマンドとしてのpipです。

対してオペレーションしている人が明に「このPython実行ファイルに紐付いているsite-packages下のパッケージ」を管理したい時にpython -m pipを使います。

もしくは逆に、Pythonを複数個システムに入れてしまった人が、「pipコマンドでインストールしたパッケージがpythonで見えない』=「pipコマンドに紐付いているPythonが自分が思っているのと違う」みたいな事態になった時に、「pipコマンドではなくてpython -m pipを使え」という回答が付いたりもします。
python -m pipを使えばそのpythonが使うsite-packagesに確実に入りますから。

投稿2022/12/26 00:47

編集2022/12/26 00:49
quickquip

総合スコア11029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問