まだ組み込みのフラグはありませんが、あなたは使うことができます
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
注意:これには無限の潜在的なバリエーションがあります。私はこの答えを短く単純にしておきますが、コメントのバリエーションを提案してください!
古いバージョンのpip
では、代わりにこれを使うことができます。
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
grep
は、@ jawacheによって示唆されているように、編集可能な( "-e")パッケージ定義をスキップすることです。 (はい、grep
+ cut
をsed
またはawk
またはPerl
または...に置き換えることができます。).
xargs
の-n1
フラグは、1つのパッケージの更新が失敗した場合にすべてが停止するのを防ぎます( @andsens に感謝).
次のPythonコードを使うことができます。 pip freeze
とは異なり、これは警告やFIXMEエラーを表示しません。 pip <10.0.1の場合
import pip
from subprocess import call
packages = [dist.project_name for dist in pip.get_installed_distributions()]
call("pip install --upgrade " + ' '.join(packages), Shell=True)
pip> = 10.0.1の場合
import pkg_resources
from subprocess import call
packages = [dist.project_name for dist in pkg_resources.working_set]
call("pip install --upgrade " + ' '.join(packages), Shell=True)
すべてのローカルパッケージをアップグレードする。 pip-review
を使うことができます。
$ pip install pip-review
$ pip-review --local --interactive
pip-review
はpip-tools
のフォークです。 @knedlsepp で言及されている pip-tools
issue を参照してください。 pip-review
パッケージは機能しますが、pip-tools
パッケージは機能しません。
pip-review
はWindows上で動作します バージョン0.5以降 。
Windows上で動作します。他の人にも良いでしょう。($はあなたがどんなディレクトリにいても、コマンドプロンプトで。例:C:/ Users/Username>)
行う
$ pip freeze > requirements.txt
テキストファイルを開き、==を> =に置き換えます。
それから
$ pip install -r requirements.txt --upgrade
特定のパッケージがアップグレードを止めることに問題がある場合(時々不調なことに)、単にディレクトリ($)に行き、名前をコメントアウトして(その前に#を追加して)再度アップグレードを実行してください。後でそのセクションのコメントを解除することができます。これはPythonのグローバル環境をコピーするのにも最適です。
私はピップレビューの方法も好きです。
py2
$ pip install pip-review
$ pip-review --local --interactive
py3
$ pip3 install pip-review
$ py -3 -m pip_review --local --interactive
あなたはすべてのパッケージをアップグレードするために 'a'を選択することができます。 1つのアップグレードが失敗した場合は、もう一度実行して次のアップグレードに進みます。
Rob van der WoudeによるFOR
の優れた ドキュメント を調べた後のWindows版
for /F "delims===" %i in ('pip freeze -l') do pip install -U %i
古くなったパッケージだけを印刷できます
pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
次のワンライナーが助けになるかもしれません:
pip list --format freeze --outdated | sed 's/(.*//g' | xargs -n1 pip install -U
エラーが発生してもxargs -n1
は動き続けます。
何が省略され、エラーが発生したのかをより詳細に制御する必要がある場合は、-n1
フラグを追加して、無視するエラーを明示的に定義してください。
| sed 's/^<First characters of the error>.*//'
これが実用的な例です。
pip list --format freeze --outdated | sed 's/(.*//g' | sed 's/^<First characters of the first error>.*//' | sed 's/^<First characters of the second error>.*//' | xargs pip install -U
このオプションは私にはもっと直接的で読みやすいように思えます。
pip install -U `pip list --outdated | tail -n +3 | awk '{print $1}'`
説明は、pip list --outdated
がすべての古いパッケージのリストをこのフォーマットで出力することです。
Package Version Latest Type
--------- ------- ------ -----
fonttools 3.31.0 3.32.0 wheel
urllib3 1.24 1.24.1 wheel
requests 2.20.0 2.20.1 wheel
tail -n +3
は最初の2行をスキップし、awk '{print $1}'
は各行の最初のWordを選択します。
これはもっと簡潔に思えます。
pip list --outdated | cut -d ' ' -f1 | xargs -n1 pip install -U
説明:
pip list --outdated
は次のような行を取得します
urllib3 (1.7.1) - Latest: 1.15.1 [wheel]
wheel (0.24.0) - Latest: 0.29.0 [wheel]
cut -d ' ' -f1
では、-d ' '
は区切り文字として「スペース」を設定し、-f1
は最初の列を取得することを意味します。
したがって、上記の行は次のようになります。
urllib3
wheel
次に、それらをxargs
に渡し、各行を追加引数としてコマンドpip install -U
を実行します
-n1
は、各コマンドに渡される引数の数をpip install -U
に1に制限します
より堅牢なソリューション
Pip3の場合はこれを使います。
pip3 freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip3 install -U \1/p' |sh
Pipの場合は、単に3sを削除してください。
pip freeze --local |sed -rn 's/^([^=# \t\\][^ \t=]*)=.*/echo; echo Processing \1 ...; pip install -U \1/p' |sh
OSX奇数
2017年7月の時点で、OSXには非常に古いバージョンのsed(12歳)が付属しています。拡張正規表現を取得するには、上記の解決策で-rの代わりに-Eを使用してください。
一般的なソリューションの問題解決
このソリューションはうまく設計されテストされています1最も人気のあるソリューションでも問題がありますが。
上記のコマンドは、sedおよびshと組み合わせて最も単純で最も移植性の高いpip構文を使用して、これらの問題を完全に解決します。コメント付きバージョンでsed操作の詳細を精査することができます2。
詳細
[1] Linux 4.8.16-200.fc24.x86_64クラスターでテストされ、定期的に使用され、他の5つのLinux/Unixフレーバーでテストされています。 Windows 10にインストールされたCygwin64でも動作します。iOSでのテストが必要です。
[2]コマンドの構造をより明確に見るために、これはコメント付きの上記のpip3コマンドとまったく同じです。
# match lines from pip's local package list output
# that meet the following three criteria and pass the
# package name to the replacement string in group 1.
# (a) Do not start with invalid characters
# (b) Follow the rule of no white space in the package names
# (c) Immediately follow the package name with an equal sign
sed="s/^([^=# \t\\][^ \t=]*)=.*"
# separate the output of package upgrades with a blank line
sed="$sed/echo"
# indicate what package is being processed
sed="$sed; echo Processing \1 ..."
# perform the upgrade using just the valid package name
sed="$sed; pip3 install -U \1"
# output the commands
sed="$sed/p"
# stream edit the list as above
# and pass the commands to a Shell
pip3 freeze --local |sed -rn "$sed" |sh
[3] PythonまたはPIPコンポーネントのアップグレードでも使用されているPythonまたはPIPコンポーネントのアップグレードは、デッドロックまたはパッケージデータベースの破損の原因となる可能性があります。
アップグレードについても同じ問題がありました。つまり、すべてのパッケージをアップグレードすることはありません。プロジェクトが壊れる可能性があるので、私は必要なものだけをアップグレードします。
パッケージごとにアップグレードしてrequirements.txtファイルを更新する簡単な方法がなかったので、私はこれを書きました pip-upgrader which あなたのrequirements.txt
ファイルのバージョンも更新します 選択したパッケージ(またはすべてのパッケージ)の場合。
インストール
pip install pip-upgrader
使用方法
あなたのvirtualenvをアクティブにしてください(それは現在のvirtualenvにアップグレードされたパッケージの新しいバージョンもインストールするので重要です)。
cd
をあなたのプロジェクトディレクトリに入れてから、以下を実行してください。
pip-upgrade
高度な使い方
要件が標準以外の場所に配置されている場合は、それらを引数として送信します。
pip-upgrade path/to/requirements.txt
どのパッケージをアップグレードしたいのかすでにわかっているのなら、単にそれらを引数として送ってください:
pip-upgrade -p Django -p celery -p dateutil
プレリリース版またはポストリリース版にアップグレードする必要がある場合は、コマンドに--prerelease
引数を追加してください。
完全開示:私はこのパッケージを書きました。
からhttps://github.com/cakebread/yolk :
$ pip install -U `yolk -U | awk '{print $1}' | uniq`
ただし、最初に卵黄を入手する必要があります。
$ Sudo pip install -U yolk
@ Ramana's answer のワンライナーバージョン。
python -c 'import pip, subprocess; [subprocess.call("pip install -U " + d.project_name, Shell=1) for d in pip.get_installed_distributions()]'
`
virtualenvを使用していて、パッケージを 加えた だけアップグレードする場合は、次のようにします。
pip install `pip freeze -l | cut --fields=1 -d = -` --upgrade
$ pip install pipupgrade
$ pipupgrade --latest --yes
pipupgrade requirements.txt
ファイルからあなたのシステム、ローカルあるいはパッケージをアップグレードするのを助けますそれはまた変更を壊さないパッケージを選択的にアップグレードします。 Python2.7以降、Python3.4以降、およびpip9以降、pip10以降、pip18以降と互換性があります。
注:私はこのツールの作者です。
Windows Powershellソリューション
pip freeze | %{$_.split('==')[0]} | %{pip install --upgrade $_}
pip issueの議論 で私が見つけた最も簡単で最速の解決策は以下のとおりです。
Sudo -H pip install pipdate
Sudo -H pipdate
これを試すことができます:
for i in ` pip list|awk -F ' ' '{print $1}'`;do pip install --upgrade $i;done
かなり素晴らしい卵黄がこれを容易にします。
pip install yolk3k # don't install `yolk`, see https://github.com/cakebread/yolk/issues/35
yolk --upgrade
Yolkに関するより詳しい情報は: https://pypi.python.org/pypi/yolk/0.4.3
それはあなたがおそらく役に立つと思うたくさんのことをすることができます。
@ Ramana's answer ここにいる人のうち、私のために最善を尽くしたが、いくつかキャッチを追加しなければならなかった:
import pip
for dist in pip.get_installed_distributions():
if 'site-packages' in dist.location:
try:
pip.call_subprocess(['pip', 'install', '-U', dist.key])
except Exception, exc:
print exc
site-packages
チェックは私の開発パッケージを除外します、なぜならそれらはシステムのsite-packagesディレクトリにないからです。 try-exceptはPyPIから削除されたパッケージを単にスキップします。
@endolith:私も簡単なpip.install(dist.key, upgrade=True)
を望んでいましたが、pipがコマンドライン以外で使われることを意図していたようには見えません(ドキュメントは内部APIについて言及していません。 docstringsを使用してください。
ピップフォークにプルリクエストを送信しました ;それまでの間、私が書いたこのpipライブラリソリューションを使用してください。
from pip import get_installed_distributions
from pip.commands import install
install_cmd = install.InstallCommand()
options, args = install_cmd.parse_args([package.project_name
for package in
get_installed_distributions()])
options.upgrade = True
install_cmd.run(options, args) # Chuck this in a try/except and print as wanted
これは私のために働くようでした...
pip install -U $(pip list --outdated|awk '{printf $1" "}')
その後、パッケージ名を正しく区切るためにprintf
をスペースで使いました。
awkアップデートパッケージを使う:
pip install -U $(pip freeze | awk -F'[=]' '{print $1}')
windows PowerShellのアップデート
foreach($p in $(pip freeze)){ pip install -U $p.Split("=")[0]}
私のスクリプト:
pip list --outdated --format=legacy | cut -d ' ' -f1 | xargs -n1 pip install --upgrade
Windows上で最短かつ最も簡単。
pip freeze > requirements.txt && pip install --upgrade -r requirements.txt && rm requirements.txt
これはもっと効果的ではないですか?
pip3 list -o | grep -v -i warning | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U
pip list -o
は期限切れのパッケージの一覧です。warning
に対するgrep -v -i warning
の反転一致cut -f1 -d1' '
は最初のWordを返します - 古いパッケージの名前です。tr "\n|\r" " "
は、cut
からの複数行の結果を1行のスペース区切りリストに変換します。awk '{if(NR>=3)print}'
はヘッダー行をスキップします cut -d' ' -f1
は最初の列を取得しますxargs -n1 pip install -U
は、その左側のパイプから1つの引数を取り、それをコマンドに渡してパッケージのリストをアップグレードします。pip_upgrade_outdated
が仕事をします。によると docs :
usage: pip_upgrade_outdated [-h] [-3 | -2 | --pip_cmd PIP_CMD]
[--serial | --parallel] [--dry_run] [--verbose]
[--version]
Upgrade outdated python packages with pip.
optional arguments:
-h, --help show this help message and exit
-3 use pip3
-2 use pip2
--pip_cmd PIP_CMD use PIP_CMD (default pip)
--serial, -s upgrade in serial (default)
--parallel, -p upgrade in parallel
--dry_run, -n get list, but don't upgrade
--verbose, -v may be specified multiple times
--version show program's version number and exit
ステップ1:
pip install pip-upgrade-outdated
ステップ2:
pip_upgrade_outdated
import pip
pkgs = [p.key for p in pip.get_installed_distributions()]
for pkg in pkgs:
pip.main(['install', '--upgrade', pkg])
あるいは:
import pip
commands = ['install', '--upgrade']
pkgs = commands.extend([p.key for p in pip.get_installed_distributions()])
pip.main(commands)
シェルを起動し続けているわけではないので、速く動きます。私は実際に物事をスピードアップするために時代遅れのリストを使用して実際にこれを取得する時間を見つけるのが大好きです。
powerShell 5.1のadm権限を持つ1行、python 3.6.5およびpip ver 10.0.1
pip list -o --format json | ConvertFrom-Json | foreach {pip install $_.name -U --no-warn-script-location}
壊れたパッケージや特別なホイールがリストになければそれはスムーズに動きます...
どうですか?
pip install -r <(pip freeze) --upgrade
私はRamanaのコードを試してみましたが、Ubuntuでは各コマンドにSudo
を書かなければならないことがわかりました。これが私のubuntu 13.10で正常に動作するスクリプトです。
#!/usr/bin/env python
import pip
from subprocess import call
for dist in pip.get_installed_distributions():
call("Sudo pip install --upgrade " + dist.project_name, Shell=True)
私は pur を最近使っています。それは簡単で要点です。アップグレードを反映するようにrequirements.txt
ファイルが更新され、その後は通常どおりrequirements.txt
ファイルを使用してアップグレードできます。
$ pip install pur
...
Successfully installed pur-4.0.1
$ pur
Updated boto3: 1.4.2 -> 1.4.4
Updated Django: 1.10.4 -> 1.10.5
Updated Django-bootstrap3: 7.1.0 -> 8.1.0
All requirements up-to-date.
$ pip install --upgrade -r requirements.txt
Successfully installed Django-1.10.5 ...
これは古いパッケージだけを更新するスクリプトです。
import os, sys
from subprocess import check_output, call
file = check_output(["pip.exe", "list", "--outdated", "--format=legacy"])
line = str(file).split()
for distro in line[::6]:
call("pip install --upgrade " + distro, Shell=True)
レガシフォーマットとして出力されない新しいバージョンのpip(バージョン18以降)。
import os, sys
from subprocess import check_output, call
file = check_output(["pip.exe", "list", "-o", "--format=json"])
line = str(file).split()
for distro in line[1::8]:
distro = str(distro).strip('"\",')
call("pip install --upgrade " + distro, Shell=True)
古いパッケージをすべて見る
pip list --outdated --format=columns
インストール
Sudo pip install pipdate
それからタイプする
Sudo -H pipdate
これが私のrbpの答えのバリエーションです。これは「編集可能」なディストリビューションとディストリビューションをバイパスします。それはオリジナルの2つの欠陥を共有します:それは不必要に再ダウンロードして再インストールします。 1つのパッケージにエラーがあると、それ以降のすべてのパッケージのアップグレードが妨げられます。
pip freeze |sed -ne 's/==.*//p' |xargs pip install -U --
関連するバグレポート、bitbucketからの移行後、少しバラバラになった:
これがPythonのスクリプトを使った別の方法です。
import pip, tempfile, contextlib
with tempfile.TemporaryFile('w+') as temp:
with contextlib.redirect_stdout(temp):
pip.main(['list','-o'])
temp.seek(0)
for line in temp:
pk = line.split()[0]
print('--> updating',pk,'<--')
pip.main(['install','-U',pk])
これはPython 3用のPowerShellソリューションです。
pip3 list --outdated --format=legacy | ForEach { pip3 install -U $_.split(" ")[0] }
そしてPython 2の場合:
pip2 list --outdated --format=legacy | ForEach { pip2 install -U $_.split(" ")[0] }
これにより、パッケージが1つずつアップグレードされます。だから、
pip3 check
pip2 check
その後、依存関係が壊れていないことを確認してください。
Cmdの1行:
for /F "delims= " %i in ('pip list --outdated --format=legacy') do pip install -U %i
だから、
pip check
その後、依存関係が壊れていないことを確認してください。
そして、さらに別の方法です:for pkg in $(pip list | cut -d' ' -f1); do Sudo pip install --upgrade $pkg; done
import os
import pip
from subprocess import call, check_call
pip_check_list = ['pip', 'pip3']
pip_list = []
FNULL = open(os.devnull, 'w')
for s_pip in pip_check_list:
try:
check_call([s_pip, '-h'], stdout=FNULL)
pip_list.append(s_pip)
except FileNotFoundError:
pass
for dist in pip.get_installed_distributions():
for pip in pip_list:
call("{0} install --upgrade ".format(pip) + dist.project_name, Shell=True)
私は @ Ramana's answer を取ってpip3をやさしくしました。
もう一つの答えとしてここに述べた:
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
考えられる解決策です。このコマンドを使用しているときに、ここにあるコメントに権限に関する問題がありました。以下を少し変更することで私はそれらを解決しました。
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 Sudo -H pip install -U
追加されたSudo -Hに注目してください。これにより、コマンドはroot権限でrumすることができました。
これが私のバリエーションです。
pip list --outdated --format=legacy | awk '{print $1;}' | xargs -n1 pip install -U
pip list -o | cut -d' ' -f1 | xargs -n1 pip install -U 2> /dev/null
2つの異なるバージョンのpythonがあり、すべてのpython3のパッケージをアップグレードするだけの場合は、pip
の代わりにpip3
を入力します。
2> /dev/null
は、迷惑なエラーメッセージをすべて取り除くためのものです
私が見つけることができる最短かつ最も簡単なもの:
pip install -U $(pip freeze | cut -d"=" -f1)
$(cmd)
キーを使用すると、任意のシェルコマンドラインを折り返すことができます(出力を返します)。
それをするための純粋なbash/zsh oneliner:
for p in $(pip list -o --format freeze); do pip install -U ${p%%=*}; done
または、素敵なフォーマットで:
for p in $(pip list -o --format freeze)
do
pip install -U ${p%%=*}
done
すべてのインストール済みパッケージを更新するための素早い方法はこれでしょう:
for pkg in $(pip list | cut -d' ' -f1) ; do pip install $pkg -U ; done
python -c 'import pip; [pip.main(["install", "--upgrade", d.project_name]) for d in pip.get_installed_distributions()]'
ワンライナー!
アップグレードをpipによってのみインストールされたパッケージにしたい、そして他のツール(apt、yumなど)によってインストールされたパッケージをアップグレードしたくない場合は、私のUbuntuで使用するこのスクリプトを使用できます - この投稿 に基づく:
printf "To update with pip: pip install -U"
pip list --outdated 2>/dev/null | gawk '{print $1;}' | while read; do pip show "${REPLY}" 2>/dev/null | grep 'Location: /usr/local/lib/python2.7/dist-packages' >/dev/null; if (( $? == 0 )); then printf " ${REPLY}"; fi; done; echo
最初にjqをインストールしてください(mac):
$ brew install jq
2。
$pip3 install --upgrade `pip3 list --outdated --format json | jq '.[] | .name' | awk -F'"' '{print $2}'`
レコードにJSON + JQ回答を追加するだけです。
pip list -o --format json | jq '.[] | .name' | xargs pip install -U
conda envでも有効な最善の解決策は次のとおりです。
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 |cut -d ':' -f 2 | xargs -n1 pip install -U
以下のcmd
スニペットは次のことを行います。
pip
を最新バージョンにアップグレードします。- すべての古いパッケージをアップグレードします。
- アップグレードされるパッケージごとに、バージョン指定子の
requirements.txt
をチェックします。
@echo off
Setlocal EnableDelayedExpansion
rem https://stackoverflow.com/questions/2720014
echo Upgrading pip...
python -m pip install --upgrade pip
echo.
echo Upgrading packages...
set upgrade_count=0
pip list --outdated > pip-upgrade-outdated.txt
for /F "skip=2 delims= " %%i in (pip-upgrade-outdated.txt) do (
echo ^>%%i
set package=%%i
set requirements=!package!
rem for each outdated package check for any version requirements
for /F %%r in (.\python\requirements.txt) do (
call :substr "%%r" !package! _substr
rem check if a given line refers to a package we are about to upgrade
if "%%r" NEQ !_substr! (
rem check if the line contains more than just a package name
if "%%r" NEQ "!package!" (
rem set requirements to what is contained in this line
echo requirements: %%r
set requirements=%%r
)
)
)
pip install --upgrade !requirements!
set /a "upgrade_count+=1"
echo.
)
if !upgrade_count!==0 (
echo All packages are up to date.
) else (
type pip-upgrade-outdated.txt
)
exit /b
:substr
rem string substition done in a separate subroutine -
rem allows expand both variables in the substring syntax
set str_source=%1
set str_search=%2
rem replace str_search with an empty string.
rem return the result in the 3rd parameter, passed by reference from the caller.
set "%~3=!str_source:%str_search%=!"
exit /b