anacondaはすべての可能なパッケージを更新しますか?


149

私が試したところconda search --outdated、古いパッケージがたくさんあります。たとえば、scipyは0.17.1ですが、最新は0.18.0です。しかし、私がするときconda update --all。パッケージは更新されません。

アップデート1

conda update --all --alt-hint

Fetching package metadata .......
Solving package specifications: ..........

# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#

アップデート2

これらのパッケージは個別に更新できます。できるよconda update scipy。しかし、なぜすべてを一度に更新できないのですか?


2
最新のscipyの依存関係が競合している可能性があります。たとえば、NumPy 1.11が必要な場合がありますが、NumPy 1.10が必要な別のパッケージがあります。あなたはconda update --all --alt-hintそれが何かの出力を与えるかどうかを試してみることができます...または単にconda update scipy何が起こるか試してみてください(おそらく--alt-hintフラグで)
darthbith

@darthbithは更新1を参照してください。役立つ情報はありません。
Wang

1
But why I cannot update all of them in one go?おそらく、古いバージョンに依存するパッケージが少なくとも1つあるため、何も更新できないためです。
2016

古いパッケージに依存するものを見つけることは可能ですか?

3
私はconda update conda前に実行することをお勧めしますconda update --all
gizzmole

回答:


230

TL; DR:依存関係の競合: 1つを更新すると (要件によって)別のダウングレードが必要

あなたが正しいです:

conda update --all

実際に行く方法です1。Condaは常にパッケージをシリーズの最新バージョン(たとえば、Python 2.xまたは3.x)にアップグレードしようとします。

依存関係の競合

ただし、依存関係の競合が発生している可能性があります(これにより、さらなるアップグレードが妨げられます)。それらが発生した場合、コンダは通常非常に明確に警告します。

たとえば、XにはY <5.0が必要なので、Yは> = 5.0にはなりません。

そのため、すべてをアップグレードすることはできません。

解決する

追加するには:多分それはうまくいくかもしれませんが、Y> 5.0で動作する新しいバージョンのXはcondaでは利用できません。より多くのパッケージがpipで利用可能であるため、pipでインストールすることが可能です。ただし、依存関係の競合が存在する場合、pipはパッケージもインストールすることに注意してください。また、condaを使用して確実にインストールできないという意味で、通常はconda環境が壊れます。その場合は、最後の手段として、すべてのパッケージがcondaでインストールされた後に実行してください。それはむしろハックです。

安全に試す方法は、アップグレード時にconda-forgeをチャネルとして追加する(-c conda-forgeフラグとして追加する)か、この新しいバージョンが本当に必要な場合にパッケージを含む他のチャネルを追加することです。このようにして、condaは利用可能なパッケージをこの場所で検索します。

更新の検討:それぞれ個別にアップグレードできますが、そうすることで、アップグレードだけでなく、別のパッケージのダウングレードも含まれます。上記の例に追加するには、次のように言います。

X> 2.0にはY <5.0が必要、X <2.0にはY> 5.0が必要

したがって、Y> 5.0のアップグレードは、Xを<2.0に、またはその逆にダウングレードすることを意味します。

もちろん、これは教育的な例ですが、実際には同じです。通常、より複雑な依存関係とサブ依存関係があります

そのため、アップグレードを個別に行ってすべてをアップグレードすることはできません。依存関係は満足できるものではないので、以前または後に、アップグレードはすでにアップグレードされたパッケージを再びダウングレードします。または、パッケージの互換性を破壊します(通常は不要です)。これは、ignore-dependenciesforce -commandを明示的に呼び出すことによってのみ可能です。しかし、それは唯一のことですハック間違いなく問題の周りにあなたの方法ではなく、通常のユーザのケース!


1インストールのパッケージを実際に更新する場合は、通常は行いません。基本環境で実行されたコマンドは、これでパッケージを更新しますが、通常は仮想環境(conda create -n myenv次にconda activate myenv)で作業する必要があります。conda update --allこのような環境内で実行すると、この環境のパッケージが更新されます。ただし、ベース環境も環境であるため、どちらの場合にも同じように答えが当てはまります。


1
condaを使用している場合は、pipで上書きするときに環境を壊さないでください。データサイエンス環境を使用している場合は、pipを使用して環境を壊す可能性が高いため、pkgを分離してインストールしないでください。
InLaw

1
私は、pipを使用するとcondaが確実に機能しなくなることに同意します。これを答えに明示的に追加しました。
Mayou36

14

質問にもっと正確に答えるには:

conda(Anacondaのminicondaのconda)は、パッケージの特定のバージョン内のみを更新します->メジャーとマイナー。それがパラダイムです。

ドキュメントでは、「注:Condaがそのシリーズの最高バージョンに更新されるため、Python 2.7は2.xシリーズの最高バージョンに更新され、3.6は3.xシリーズの最高バージョンに更新されます。」 文書

Wangが再現可能な例を提供しない場合、支援できるのは1人だけです。例えば、それは本当に彼が更新したい仮想環境なのか、それともWangは彼/彼女が望むものを手に入れられるのか

conda update -n ENVIRONMENT --all

*「update --all」を実行する前にドキュメントをお読みください!これは、本質的にすべてのパッケージの更新につながりません。condaは環境内のすべてのパッケージ間の依存関係を解決しようとするため、警告なしでパッケージがDOWNGRADEDになる可能性があります。


ほとんどすべてを更新したい場合は、ピンファイルを作成できます

echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned

更新を実行する前。

後で更新のために環境内のファイルを無視したい場合は、次のようにすることができます。

conda update --all --no-pin

update --allは実行しないでください。それでも必要な場合は、クローン環境でこれをテストする方が賢明です。

最初のステップは、常に現在の仕様をバックアップすることです。

conda list -n py35 --explicit 

(しかし、それでも利用可能なソースへのリンクが常にあるわけではありません-jupyterlab拡張機能のように)

次に、クローンを作成して更新できます。

conda create -n py356 --clone py35

conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all

conda設定


更新:

コンダのアイデアはいいですが、複雑な環境ではうまく機能しないので、私は個人的にnix-shell (or lorri) and poetry[優れたpip / conda .-)](intro poetry2nix)の組み合わせを好みます。


最後に、依存関係が原因で互換性のないパッケージを実際に処理する必要がある場合は、NixOS / nix-pkgsなどのテクノロジーを使用することが可能です。


3
この回答は、次のことを前提としています。1. miniconda3をデフォルトの名前とパス(anacondaではなく)でインストールした2.環境「py35」を作成した。さらに、この回答の対象となる初心者は(私の意見では)簡単に混乱する可能性があることを指定できます。さらに、あなたは実際には質問に答えないように縫い合わせます。これはまだ彼がアップグレードすることを許可しないかもしれないからです。そしてそれが彼の目標です。
Mayou36

もちろん、個別に質問させてください。a)「特定のバージョン内のみ」:これは、パッケージではなく、Pythonのバージョンを指します。またはこれを引用できますか?
Mayou36

b) "ドキュメントに[...]"があります:これは明らかにPythonバージョンを指します。質問とは関係ありませんね または、なぜこれを投稿するのですか?このステートメントはどのように関連していますか?
Mayou36

c)conda update -n ENVIRONMENT --all:これは、基本環境を更新するためではなく、これが彼/彼女が通常使用したいものであることに同意します。しかし、私はこれについてあなたの答えに説明をまったく見つけませんでした、それは単に書かれているだけで、ベース環境でのopのコマンドの使用の違いについて言及していません。
Mayou36

d)「ほとんどすべてを更新したい場合は、PINファイルを作成できます」:これは良い情報です。しかし、それはOPが要求したものではありません。彼はすべてを更新できない理由を知りたいと思っています。バージョンを固定したくありません。だからそれは答えに追加されません、そうですか?
Mayou36

2

パッケージの依存関係グラフを想像してください。パッケージの数が多くなると、パッケージのアップグレード/追加時に競合が発生する可能性がはるかに高くなります。これを回避するには、Anacondaで新しい環境を作成するだけです。

質素になって、必要なものだけをインストールしてください。私の場合、新しい環境に次のパッケージをインストールしました。

  • パンダ
  • scikit-learn
  • matplotlib
  • ノート
  • ケラス

そして、私は合計84個のパッケージを持っています。


これは、特定のパッケージをアップグレードする方法に関する質問には答えません。
Mayou36

0

MSウィンドウで作業する場合は、Anacondaナビゲーターを使用できます。環境をクリックすると、ドロップダウンボックスで、デフォルトで「インストール」されます。「更新可能」を選択して、そこから開始できます


1
しかし、個別に選択するには数が多すぎる場合、更新するにはすべてをどのように選択しますか?
beldaz

@beldaz、私は最後の列で141のパッケージすべてを「バージョン」で選択して「解決」しようとした後、「適用」を押しました。それが機能するかどうかわからない:(。次に、<win>を押してAnacondaコンソールを開きました
。AnacondaPrompt

管理者として実行も必要になる場合があります
Pieter21

これは実際の問題も解決しません。依存関係の競合について受け入れられた回答を読んでください。
Mayou36

-1

使用したすべての可能なパッケージを更新するには conda update --update-all

できます!


4
いいえ、それは「行いません」。OPを再度読み取ると、依存関係の競合が発生します。この答えは何も解決説明もしません
Mayou36

-6

とでこの問題を解決condaしましたpip

まず、私は実行します:

conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5

その後、私はコマンドを開いてこのコードを実行します

pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5

最後に、あなたはmatplotlibこのコードによってpipでインストールする必要がありますpip install matplotlib


6
これは、OPが実行したかったことにも
ほど遠い
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.