20

どのように、Pythonスクリプト内でpipを使用してパッケージをインストールできますか?os.systemを使用していません。pipをインポートして使用したいと思います。

4

6 に答える 6

28

pip.main()は、pipバージョン10以降では機能しなくなりました。使用する必要があります:

from pip._internal import main as pipmain

pipmain(['install', 'package-name'])

下位互換性のために、以下を使用できます。

try:
    from pip import main as pipmain
except ImportError:
    from pip._internal import main as pipmain
于 2018-08-06T09:37:07.447 に答える
8

それらの答えは時代遅れだと思います。実際、次のことができます。

import pip
failed = pip.main(["install", nameOfPackage])

main()に渡すリストに追加の引数を挿入します。0(失敗)または1(成功)を返します

ジョン

于 2016-05-23T11:33:44.553 に答える
5

ルート権限が必要なため、Pythonスクリプト内にパッケージをインストールすることはお勧めできません。作成したスクリプトと一緒に追加のモジュールを出荷するか、モジュールがインストールされているかどうかを確認する必要があります。

try:
   import ModuleName
except ImportError:
   print 'Error, Module ModuleName is required'

スクリプト内でpipを使用してパッケージをインストールする場合はcallsubprocessモジュールから調べる必要があります( " os.system()"は非推奨です)。

pipモジュールはありませんが、上記の方法を使用して簡単に作成できます。

于 2012-10-17T15:21:49.603 に答える
3

私はos.systemを使用して、pipモジュールをインストールする端末をエミュレートしました(os.systemは非推奨ですが、それでも機能し、最も簡単な方法です)、EG私は複数のゲームエンジンを作成していますすべてPygameを使用するPythonスクリプト。スタートアップファイルでは、次のコードを使用して、ユーザーのシステムにpygameがない場合にインストールします。

import os
os.system('pip install pygame')

残念ながら、pipがない場合はインストール方法がわからないため、このスクリプトはpipに依存しています。

于 2018-02-14T10:05:05.587 に答える
1

プロキシの背後にいる場合は、次のようにコード内にモジュールをインストールできます...

import pip
pip.main(['install', '--proxy=user:password@proxy:port', 'packagename'])
于 2017-04-10T09:24:26.650 に答える
-2

これは、コメントに割り当てられたスペースに収まらなかったこの投稿へのコメントです。

パッケージをインストールするユースケースは、パッケージsetup.py自体の内部で発生する可能性があることに注意してください。たとえば、plyパーサーテーブルを生成し、それらをディスクに保存します。これらのテーブルは、インストールされているパッケージと一緒ににコピーする必要があるため、実行前に生成する必要があります。 setuptools.setupsite_packages

setup_requiresのオプションはありますが、パッケージはインストールsetuptools.setupされません。

したがって、インストールプロセスインストールされたパッケージの両方に必要な依存関係は、この方法ではインストールされません。

このような依存関係を内部に配置しても、必ずしも期待どおりinstall_requiresに機能するとは限りませsetuptools.setupそれが機能したとしても、依存関係のsetup_requiresインストールとパッケージ自体のインストールの間に実行するには、に何らかの関数を渡す必要があります。このアプローチはネストされているため、PEP20に対して行われます。

したがって、残っている2つのフラットなアプローチは次のとおりです。

  1. setup.py自動(推奨)または手動(以前にテーブルの作成に失敗したことをユーザーに通知することにより)の2回実行しsetuptools.setupます。

  2. 必要な依存関係をインストールするために、最初の呼び出しpip(または他の同等のソリューション)。次に、テーブルの作成(またはインストール前のタスクが必要な場合)に進み、setuptools.setup最後に呼び出します。

setuptools.setup個人的には、No.2の方が好きです。なぜなら、No.1は、 2回呼び出す意図をすでに知っていない限り、インストール中にコンソール出力を観察するユーザーを混乱させる可能性があるからです。

さらに、インストールに必要なすべての権限(たとえば、必要に応じてroot)は、setup.py実行時に(そして正確にその時点で)確実に存在します。したがってsetup.py、このタイプのアクションの「標準的な」ユースケースと見なすことができます。

于 2015-02-11T04:57:29.380 に答える