どのように、Pythonスクリプト内でpipを使用してパッケージをインストールできますか?os.systemを使用していません。pipをインポートして使用したいと思います。
6 に答える
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
それらの答えは時代遅れだと思います。実際、次のことができます。
import pip
failed = pip.main(["install", nameOfPackage])
main()に渡すリストに追加の引数を挿入します。0(失敗)または1(成功)を返します
ジョン
ルート権限が必要なため、Pythonスクリプト内にパッケージをインストールすることはお勧めできません。作成したスクリプトと一緒に追加のモジュールを出荷するか、モジュールがインストールされているかどうかを確認する必要があります。
try:
import ModuleName
except ImportError:
print 'Error, Module ModuleName is required'
スクリプト内でpipを使用してパッケージをインストールする場合はcall
、subprocess
モジュールから調べる必要があります( " os.system()
"は非推奨です)。
pipモジュールはありませんが、上記の方法を使用して簡単に作成できます。
私はos.systemを使用して、pipモジュールをインストールする端末をエミュレートしました(os.systemは非推奨ですが、それでも機能し、最も簡単な方法です)、EG私は複数のゲームエンジンを作成していますすべてPygameを使用するPythonスクリプト。スタートアップファイルでは、次のコードを使用して、ユーザーのシステムにpygameがない場合にインストールします。
import os
os.system('pip install pygame')
残念ながら、pipがない場合はインストール方法がわからないため、このスクリプトはpipに依存しています。
プロキシの背後にいる場合は、次のようにコード内にモジュールをインストールできます...
import pip
pip.main(['install', '--proxy=user:password@proxy:port', 'packagename'])
これは、コメントに割り当てられたスペースに収まらなかったこの投稿へのコメントです。
パッケージをインストールするユースケースは、パッケージsetup.py
自体の内部で発生する可能性があることに注意してください。たとえば、ply
パーサーテーブルを生成し、それらをディスクに保存します。これらのテーブルは、インストールされているパッケージと一緒ににコピーする必要があるため、実行前に生成する必要があります。 setuptools.setup
site_packages
setup_requires
のオプションはありますが、パッケージはインストールsetuptools.setup
されません。
したがって、インストールプロセスとインストールされたパッケージの両方に必要な依存関係は、この方法ではインストールされません。
このような依存関係を内部に配置しても、必ずしも期待どおりinstall_requires
に機能するとは限りません。setuptools.setup
それが機能したとしても、依存関係のsetup_requires
インストールとパッケージ自体のインストールの間に実行するには、に何らかの関数を渡す必要があります。このアプローチはネストされているため、PEP20に対して行われます。
したがって、残っている2つのフラットなアプローチは次のとおりです。
setup.py
自動(推奨)または手動(以前にテーブルの作成に失敗したことをユーザーに通知することにより)の2回実行しsetuptools.setup
ます。必要な依存関係をインストールするために、最初の呼び出し
pip
(または他の同等のソリューション)。次に、テーブルの作成(またはインストール前のタスクが必要な場合)に進み、setuptools.setup
最後に呼び出します。
setuptools.setup
個人的には、No.2の方が好きです。なぜなら、No.1は、 2回呼び出す意図をすでに知っていない限り、インストール中にコンソール出力を観察するユーザーを混乱させる可能性があるからです。
さらに、インストールに必要なすべての権限(たとえば、必要に応じてroot)は、setup.py
実行時に(そして正確にその時点で)確実に存在します。したがってsetup.py
、このタイプのアクションの「標準的な」ユースケースと見なすことができます。