18

Python ディストリビューションに既に pip または easy_install がインストールされていると仮定して、スクリプト自体からユーザー ディレクトリに必要なパッケージをインストールする方法を教えてください。

私が知っていることから、pipもpythonモジュールであるため、ソリューションは次のようになります。

try:
    import zumba
except ImportError:
    import pip
    # ... do "pip install --user zumba" or throw exception   <-- how?
    import zumba

os.system()私が見逃しているのは、Python の内部から「pip install --user zumba」を実行していることです。他の問題が発生する可能性があるため、使用したくありません。

可能性はあると思います...

4

3 に答える 3

25

新しい pip バージョン用に更新 (>= 10.0):

try:
    import zumba
except ImportError:
    from pip._internal import main as pip
    pip(['install', '--user', 'zumba'])
    import zumba

@Joop のおかげで、適切な答えを思いつくことができました。

try:
    import zumba
except ImportError:
    import pip
    pip.main(['install', '--user', 'zumba'])
    import zumba

重要な注意事項の 1 つは、モジュールをユーザー ディレクトリにインストールするため、root アクセスを必要とせずに機能することです。

バイナリ モジュールまたはコンパイルが必要なモジュールで機能するかどうかはわかりませんが、pure-python モジュールでは明らかにうまく機能します。

自己完結型のスクリプトを記述できるようになり、依存関係について心配する必要がなくなりました。

于 2013-06-24T09:51:55.687 に答える
3

現在受け入れられている回答では、アプリ名の競合が発生する可能性があることに注意してください。アプリの名前空間からインポートしても、システムにインストールされているものの全体像はわかりません。

より良い方法は次のとおりです。

import pip

packages = [package.project_name for package in pip.get_installed_distributions()]

if 'package' not in packages:
    pip.main(['install', 'package'])
于 2016-08-26T18:42:20.850 に答える