pipコマンドを使用して、requirements.txtからPythonパッケージをアップグレードする


111

すべてのPythonパッケージをpipコマンドを使用してrequirements.txtファイルからアップグレードするにはどうすればよいですか?

以下のコマンドで試してみました

$ pip install --upgrade -r requirements.txt

それ以来、Pythonパッケージにはバージョン番号(Django==1.5.1)がサフィックスとして付いているため、アップグレードされていないようです。requirements.txtファイルを手動で編集するよりも良い方法はありますか?

編集する

Andyが回答で述べたように、パッケージは特定のバージョンに固定されているため、pipコマンドを使用してパッケージをアップグレードすることはできません。

しかし、pip-tools次のコマンドを使用してこれを実現できます。

$ pip-review --auto

これにより、すべてのパッケージがrequirements.txtから自動的にアップグレードされます(必ず、pip-toolspip installコマンドを使用してインストールしてください)。


7
Pip-toolsはうまく機能していますpip-compile -U requirements.txt。更新された構文はです。
erikreed

回答:


40

いいえ。要件ファイルは特定のバージョンに固定されています。要件がそのバージョンに設定されている場合は、それらのバージョンを超えてアップグレードすることはできません。アップグレードする必要がある場合は、要件ファイルで固定されていないバージョンに切り替える必要があります。

例:

lxml>=2.2.0

これにより、lxmlが2.2.0より新しいバージョンにアップグレードされます。

lxml>=2.2.0,<2.3.0

これにより、lxmlが2.2.0と2.3.0の間の最新バージョンにアップグレードされます。


2
私は次のことをするのに役立ちました。1. venvを削除しました2.同じ名前で新しいものを作成しました(すべてのpipパッケージをクリーンアップする方法)3. requirements.txtのすべての==を> =に置き換えます4. pip install -r requirements.txt 4.
zhukovgreen

sed 's/==/>=/g' requirements.txt > TMP_FILE && mv TMP_FILE requirements.txt すべて==を置き換えます>=
philshem

80

あなたが試すことができます:

pip install --upgrade --force-reinstall -r requirements.txt

インストール済みのパッケージを無視して、新しいパッケージをインストールすることもできます。

pip install --ignore-installed -r requirements.txt

2
そのオプションでは、同じバージョンを再インストールするようです。Andyが上記の回答で述べたように、パッケージは特定のバージョンに固定されています。
abhiomkar 14

@abhiomkarあなたは正確だ同じバージョンを再インストールしたいと思った(おそらくバックポート修正を追加するため)
Freelancer

1
2番目のコマンドは私が探していたものです。ことに注意してください-I--ignore-installed同じフラグであり、-もちろん、それは持って有効ではありません,そこでは。この方法では、インストール中にダウングレードは発生せず、要件のインストールが完了した後、を使用してインストール済みパッケージをアップグレードできますpip-review --auto
AXO 2017年

79

私はすでにこの質問にここで答えました。これが私の解決策です:

パッケージごとにアップグレードし、requirements.txtファイルを更新する簡単な方法がなかったため、選択したパッケージ(またはすべてのパッケージ)のファイル内のバージョンも更新するrequirements.txtこのpip-upgraderを作成しました。

取り付け

pip install pip-upgrader

使用法

virtualenvをアクティブ化します(重要なのは、アップグレードされたパッケージの新しいバージョンも現在のvirtualenvにインストールするためです)。

cd プロジェクトディレクトリに移動し、次のコマンドを実行します。

pip-upgrade

高度な使用法

要件が標準以外の場所にある場合は、引数として送信します。

pip-upgrade path/to/requirements.txt

アップグレードするパッケージがすでにわかっている場合は、引数として送信します。

pip-upgrade -p django -p celery -p dateutil

リリース前/リリース後のバージョンにアップグレードする必要がある場合は--prerelease、コマンドに引数を追加します。

完全な開示:このパッケージを作成しました。


5
すごい!そのような関数がpipに直接存在しないのは驚くべきことです
Jacopofar

5
エレガント!私はこれまでスクロールダウンして
とても嬉しかった

3
私はこれを使用しましたが、これはf-strings以来の最高のものです。
Pierre.Sassoulas

1
素晴らしいツール。ありがとうございました。
mszaro

とても便利なツール!また、固定バージョンをアップグレードするpurという別のパッケージも見つけました
Gal Avineri

4

予測可能なビルドを実現するために、すべての依存関係を凍結することをお勧めします。

その際、次のようにすべての依存関係を一度に更新できます。

sed -i '' 's/==/>=/g' requirements.txt
pip install -U -r requirements.txt
pip freeze > requirements.txt

上記を行ったら、新しいパッケージセットでプロジェクトをテストし、最終的にファイルをリポジトリにコミットrequirements.txtます。


3

私はちょうど同じことをしなければならなかった...この小さなワンライナーを使って仕事をしました:

packages=$(cat requirements.txt | sed 's/==.*//g'); echo $packages | xargs pip3 install -U; freeze=$(pip3 freeze); for p in $(echo $packages); do echo $freeze | grep -E "^${p}==" >> requirements.new; done

これは:

  • packages=$(cat requirements.txt | sed 's/==.*//g') requirements.txtに現在のパッケージ名のリストを作成します(バージョンを削除します)。
  • echo $packages | xargs pip3 install -U 次に、すべてのパッケージを引数としてpip3に渡してアップグレードします。
  • freeze=$(pip3 freeze); 現在のパッケージバージョンをすべて、requirements.txtに必要な形式で取得します。
  • for p in $(echo $packages) 次に、パッケージ名を反復処理します
    • echo $freeze | grep -E "^${p}==" >> requirements.new パッケージと一致するpipフリーズ出力からパッケージバージョン行を取得し、新しいrequirements.txtに書き込みます

これには、元のrequirements.txtの順序を維持するという追加の利点があります。:)

お役に立てれば!


2

bashを使用してそれを行うことができなかったので、バージョンのない新しい要件ファイルを作成して使用するpythonモジュールを作成しました。

data = open('requirements-prod.pip', 'r')
data2 = open('requirements-prod-no-version.pip', 'w')
for line in data.readlines():
    new_line = line[:line.index('==')]
    data2.write(new_line + '\n')
data2.flush()

次に、新しいファイルからlibsをインストールします pip install -U -r requirements-prod-no-version.pip

最後に、バージョンを元のファイルにフリーズします pip freeze > requirements-prod.pip


2

別の解決策は、アップグレード要件パッケージを使用することです

pip install upgrade-requirements

次に実行します:

upgrade-requirements

最新バージョンではないすべてのパッケージをアップグレードし、最後に更新されたrequirements.txtを作成します。


0
  • 1)pipでインストールされたファイルをreqs.txtからアップグレード するには、==の代わりに> =を追加します。これにより、pipに、要求されているライブラリ以上のlib をインストールするように指示します。ここでは、要求されたライブラリの最新バージョンをインストールします。

    1.a)**スレッドに対する私の回答** py -m pip install -r reqs.txtを毎日の再起動に追加することによって...またはインストールされたライブラリを更新できる性質のもの。アンディパーフェクトリー

    -このスレッドを入力した理由は、仮想環境のベースピップを更新する方法に関する情報を見つけることでした(通常は10.0.03ですか?)

2つの解決策の1つを導き出すことができた問題を満足することを望んでいます

A. venvの作成|| B.必要なライブラリのインストール

アンディのおかげで私はニーズBを満たしました

reqs.txtに pip > = 要求されたバージョン追加する

新しい仮想環境のインスタンス化時|| 以前のVenvの再インスタンス化

  1. py -m venv devenv

新しい開発環境をセットアップする

  1. devenv\scripts\activate.bat

開発環境をアクティブにする

  1. python -m pip install -r requirenments.txt

ベースライブラリをインストールする

yeilds出力

pip > = 20.0.2の収集(-r requirenments.txt(1行目)から)cached> https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-の使用none-any.whl

既存のインストールが見つかりました:pip 10.0.1

pip-10.0.1のアンインストール:

 Successfully uninstalled pip-10.0.1
 Successfully installed pip-20.0.2

脳のダンプでごめんなさい、これが誰かを助けることを願っています:)

🤳オースティン👨‍🎤🚀🥊


0

2番目の答えは最も便利ですが、私がやりたかったのは、一部のパッケージをロックしながら、他のパッケージを最新バージョン(たとえば、youtube-dl)でロックすることです。

requirements.txtは次のようになります(〜は互換性を意味します):

Pillow==6.2.2
requests~=2.22.0
youtube_dl

次に、ターミナルで次のコマンドを使用します pip install --upgrade -r requirements.txt

これにより、Pillowが確実に6.2.2に留まり、リクエストが最新の2.22.x(利用可能な場合)にアップグレードされ、最新バージョンのyoutube-dlがまだインストールされていない場合はインストールされます。


0

最も簡単な解決策は、次のようにrequirements.txtを作成することです。

pip freeze | sed 's/==/>=/' > requirements.txt

-1

あなたがdjangoプロジェクトに何かをインストールし、インストール後に要件ファイルを更新したい場合、このコマンドはrequirement.txtファイルを更新できますpip freeze> requirements.txt

プロジェクトに要件ファイルが存在しない場合は、このコマンドを使用して、新しいrequire.txtファイルを作成できます。pipfreeze> requirements.txt


これは、すべての要件の要件も追加し、不必要に大きな要件ファイルが作成されるため、悪い考えです。その後、単一の依存関係を更新することにした場合、そのパッケージのために要件ファイルに追加された他の要件がわからない限り、バージョンの競合が発生する可能性があります。
暴動

-10

次のようにrequirements.txtを編集し、$ sh ./requirements.txtを実行します

pip install -U amqp;
pip install -U appdirs;
pip install -U arrow;
pip install -U Babel;
pip install -U billiard;
pip install -U celery;
pip install -U Django;
pip install -U django-cors-headers;
pip install -U django-crispy-forms;
pip install -U django-filter;
pip install -U django-markdown-deux;
pip install -U django-pagedown;
pip install -U django-timezone-field;
pip install -U djangorestframework;
pip install -U fcm-django;
pip install -U flower;
pip install -U gunicorn;
pip install -U kombu;
pip install -U Markdown;
pip install -U markdown2;
pip install -U packaging;

3
これはアンチパターンの理想的な例です。ここで何が問題になっていますか:1)requirements.txtは.txtファイルですが、実行可能にしています2)。単純なpip install -r requirements.txtコマンドがあります。したがって、プロジェクトの依存関係をリストする場合にのみ、requirements.txtファイルを使用できます。3)パッケージのバージョンを使用していない。4)一般的なパターンではないため、他の開発者はそれを使用する方法について何もしません。5)CI / CDパイプラインでは使いにくい。この例は使用しないでください
Fannigurt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.