web-dev-qa-db-ja.com

python idleでpipを実行します

私はピップを実行することに興味があります。そのようなウィンドウでコマンドシェルでpipを実行するたびに

c:\python27\script>pip install numpy

しかし、私はそれをpythonアイドル状態で実行できるかどうか疑問に思いました。

import pip
pip.install("numpy")

残念ながら、機能していません。

8
Hyun-geun Kim

この質問は、pythonプログラムからpipを実行する方法に関するものです。IDLEは、このバージョンのクエシトンとは直接関係ありません。

J. J. Hakalaのコメントを拡張すると、_pip install pillow_などのコマンドラインはスペースで分割されて_sys.argv_になります。 pipがメインモジュールとして実行されると、pip.main(sys.argv[1:])が呼び出されます。 pipをインポートする場合、pip.main(arg_line.split())を呼び出すことができます。ここで、_arg_line_は、コマンドラインのpipの後ろの部分です。

昨年9月(2015)別のpythonプログラムからこの意図しないAPIを使用して実験し、トラッカーの問題の最初の結果 23551 を報告しました。議論とその後の結果が続きました。

1つのプロセスで複数のコマンドを実行する際の問題は、一部のpipコマンドが、通常一定のままであるsys.pathだけでなく、通常は変更されるインストール済みパッケージのリストもキャッシュすることです。 pipはプロセスごとに1つのコマンドを実行してから終了するように設計されているため、キャッシュを更新することはありません。 1つのプロセスで複数のコマンドを実行するためにpip.mainが使用される場合、キャッシング後に指定されたコマンドは、古くて正しくないキャッシュを使用する場合があります。たとえば、listの後のinstallは、 インストール前 の状態を示しています。

Pipからの出力を調べたいプログラムの2番目の問題は、stdoutとstderrに出力されることです。これらのストリームを実行中のpipの一部としてプログラム変数にキャプチャする program を投稿しました。

L_Pavによって提案されているように、各pipコマンドにサブプロセス呼び出しを使用すると、効率は低下しますが、両方の問題が解決されます。 communicateメソッドは、出力ストリームを使用可能にします。サブプロセスのドキュメントを参照してください。

4
Terry Jan Reedy

実際には、subprocess.Popen(apt-get numpy)を使用できると思いますが、PIPでそれを行う方法はわかりません。

3
L_Pav

現時点では正式な方法はありません。pip.mainを使用できますが、現在のアイドルセッションでは、このインストールされたパッケージが「表示」されません。

pipの「高レベル」プログラムAPIを追加する方法 については多くの議論がありましたが、それは有望なようです。

3
fn.

Macを使用している場合は、次のように実行できるはずです。

  1. IDLEに移動します。
  2. Help( 'modules')を実行します。
  3. HTMLモジュールを見つけます。
  4. ヘルプを実行( 'HTML')
  5. This/file/map/example /などのファイルマップがポップアップ表示されます。
  6. Finderに移動し、command + shift + gを実行して、そこにファイルマップを貼り付けます。最後のファイルを削除してください。モジュールファイルに移動するためです。
  7. すべてのモジュールがあります。モジュールを追加したい場合は、モジュールのファイルをダウンロードしてそこに置きます。

これがお役に立てば幸いです。

0
Grifin