web-dev-qa-db-ja.com

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

私は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をすることができます。しかし、なぜそれらすべてを一度に更新できないのでしょうか。

92
Wang

TL; DR:依存関係の競合:1つを更新するrequires(要件から)別のダウングレード

あなたが正しいです:

conda update --all

実際に行く方法です。 Condaは常にパッケージをシリーズの最新バージョン(たとえば、Python 2.xまたは3.x)にアップグレードしようとします。ただし、依存関係の競合が発生する可能性があります(これにより、さらにアップグレードできなくなります)。 Condaは通常、発生した場合に非常に明確に警告します。

例えばXはY <5.0を必要とするため、Yは5.0以上にはなりません

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

追加するには:多分動作するかもしれませんが、Y> 5.0で動作するXの新しいバージョンはcondaでは利用できません。 pipではより多くのパッケージが利用可能であるため、pipでインストールすることが可能です。しかし、依存関係の競合が存在する場合、pipはパッケージもインストールすることに注意してください!

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

更新を検討するcanそれぞれ個別にアップグレードしますが、そうすることでアップグレードだけでなく、別のパッケージも同様です。上記の例に追加するには:

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

したがって、Y> 5.0をアップグレードすると、Xが<2.0にダウングレードされ、逆も同様です。

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

したがって、アップグレードを個別に実行してそれらすべてをアップグレードすることはできません。依存関係は充足できないため、以前または後で、アップグレードは既にアップグレードされたパッケージを再度ダウングレードします。または、パッケージの互換性を破壊します(通常は不要です)。これは、ignore-dependenciesおよびforce-コマンドを明示的に呼び出すことによってのみ可能です。しかし、それはhackの問題であり、通常のユーザーのケースではありません!

170
Mayou36

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

conda(Anacondaの場合はminicondaの場合はconda)は、パッケージの特定のバージョン内(>メジャーおよびマイナー)でのみ更新されます。それがパラダイムです。

ドキュメントには、「注:Condaはそのシリーズの最新バージョンにアップデートされているので、Python 2.7は2.xシリーズの最高バージョンに、3.6は3.xシリーズの最高バージョンにアップデートされています。」 doc

Wangが再現可能な例を挙げていないのであれば、手助けしかできない。例えばそれは本当に彼が更新したい仮想環境なのか、それともWangが望んでいたものを手に入れられるのか。

conda update -n ENVIRONMENT --all

ほとんどすべてを更新したいだけの場合は、PINファイルを作成できます。

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
10
InLaw

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

2
David

私が使用した可能性のあるすべてのパッケージを更新するためにconda update --update-all

できます!

1
nein nein

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

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

  • pandas
  • scikit-learn
  • matplotlib
  • ノート
  • ケラス

そして私は全部で84のパッケージを持っています。

1
Pei

conda update --all

プロンプトなしですべてのパッケージを更新する

conda update --all -y

0