아나콘다는 가능한 모든 패키지를 업데이트 하시겠습니까?


151

나는 시도 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?이전 버전에 의존하는 패키지가 하나 이상 있으므로 업데이트 할 수 없기 때문일 수 있습니다.
cel

어느 것이 오래된 패키지에 의존하는지 알아낼 수 있습니까?
Wang

3
나는 conda update conda전에 실행 을 권장합니다conda update --all
gizzmole

답변:


230

TL; DR : 종속성 충돌 : 갱신 한 요구 (그것의 요구에 의해) 다른 다운 그레이드

당신이 맞아요 :

conda update --all

실제로 갈 길입니다 1 . Conda는 항상 패키지를 최신 버전 (Python 2.x 또는 3.x)으로 업그레이드하려고합니다.

종속성 충돌

그러나 종속성 충돌이있을 수 있습니다 (추가 업그레이드를 방해 함). Conda는 일반적으로 발생하는 경우 매우 명시 적으로 경고합니다.

예를 들어 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 myenvconda activate myenv)으로 작업해야합니다 . conda update --all이러한 환경 내에서 실행 하면이 환경 내의 패키지가 업데이트 됩니다. 그러나 기본 환경도 환경이므로 두 가지 경우 모두 동일한 방식으로 답이 적용됩니다.


1
conda를 사용하는 경우 pip로 덮어 쓸 때 환경을 중단하지 마십시오! 데이터 과학 환경을 사용하는 경우 pip를 사용하여 환경을 파괴 할 가능성이 높으므로 pkg을 분리하여 설치하지 마십시오.
InLaw

1
pip를 사용하면 conda가 더 이상 안정적으로 작동하지 않습니다. 나는 이것을 명시 적으로 답변에 추가했습니다.
Mayou36

15

질문에보다 정확하게 대답하려면 :

conda (anaconda의 경우 miniconda의 conda)는 패키지의 특정 버전 (> major 및 minor) 내에서만 업데이트됩니다. 이것이 패러다임입니다.

문서에서 "참고 : Conda는 시리즈에서 가장 높은 버전으로 업데이트되므로 Python 2.7은 2.x 시리즈에서 가장 높은 버전으로 업데이트되고 3.6은 3.x 시리즈에서 가장 높은 버전으로 업데이트됩니다." 문서

Wang이 재현 가능한 예를 제공하지 않으면 도움이 될 수 있습니다. 예를 들어 실제로 업데이트하려는 가상 환경이거나 Wang이 원하는 것을 얻을 수 있습니까?

conda update -n ENVIRONMENT --all

* "update --all"을 실행하기 전에 문서를 읽으십시오! 이로 인해 모든 패키지가 본질적으로 업데이트되는 것은 아닙니다. conda는 사용자 환경의 모든 패키지 간의 종속성 관계를 해결하려고 시도하므로 경고없이 패키지가 다운 그레이드 될 수 있습니다.


거의 모든 것만 업데이트하려면 핀 파일을 만들 수 있습니다

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

업데이트를 실행하기 전에

나중에 업데이트를 위해 env의 파일을 무시하려면 다음을 수행하십시오.

conda update --all --no-pin

--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를 설치했으며 (아나콘다를 말하지 않음) 2. "py35"환경을 만들었습니다. 이 답변을 대상으로 해야하는 초보자가 더 혼란 스러울 수 있음을 더 구체적으로 지정할 수 있습니다. 또한 여전히 그 질문에 대답 하지는 않습니다. 그래야 여전히 업그레이드 할 수 없기 때문입니다. 이것이 그의 목표입니다.
Mayou36

물론, 개별적으로 물어 보도록하겠습니다 : a) "특정 버전에서만": 이것은 패키지가 아닌 파이썬 버전을 나타냅니다. 아니면 이것을 인용 해 주시겠습니까?
Mayou36

b) "문서에서 [...]를 찾을 수 있습니다": 이것은 파이썬 버전을 분명히 나타냅니다. 그것은 질문과 관련이 없습니다. 맞습니까? 아니면 왜 이것을 게시합니까? 이 진술은 어떤 관련이 있습니까?
Mayou36

c) conda update -n ENVIRONMENT --all: 나는 이것이 기본 환경을 업데이트하지 않고 일반적으로 사용하고 싶은 것에 동의합니다. 그러나 나는 이것에 대한 당신의 대답에서 전혀 설명을 찾지 못합니다. 단지 쓰여졌으며 기본 환경에서 op의 명령을 사용하는 것의 차이점을 언급하지 않습니다.
Mayou36

d) "거의 모든 것만 업데이트하려면 핀 파일을 만들 수 있습니다": 이것은 좋은 정보입니다. 그러나 OP가 요구 한 것은 아닙니다. 그는 모든 것을 업데이트 할 수 없는지 알고 싶어한다 . 그는 버전을 고정하고 싶지 않습니다. 따라서 대답에 추가되지 않습니까?
Mayou36

2

패키지의 수가 증가 할 때 패키지 업그레이드 / 추가시 충돌이 발생할 가능성이 훨씬 높은 패키지의 종속성 그래프를 상상해보십시오. 이를 피하려면 Anaconda에서 새 환경을 작성하십시오.

검소하고 필요한 것만 설치하십시오. 나를 위해 새 환경에 다음 패키지를 설치했습니다.

  • 팬더
  • 사이 킷 학습
  • matplotlib
  • 공책
  • 케 라스

그리고 총 84 개의 패키지가 있습니다.


특정 패키지를 업그레이드하는 방법에 대한 질문에는 대답하지 않습니다.
Mayou36

0

MS 윈도우에서 작업하는 경우 Anaconda 탐색기를 사용할 수 있습니다. 드롭 다운 상자에서 환경을 클릭하면 기본적으로 "설치"됩니다. "업데이트 가능"을 선택하고 거기서부터 시작할 수 있습니다


1
그러나 개별적으로 선택할 수있는 항목이 너무 많을 때 업데이트 할 모든 항목을 어떻게 선택합니까?
beldaz

@beldaz, 마지막 열에서 'Version'으로 141 개의 패키지를 모두 선택하여 '해결'을 시도한 다음 적용을 누릅니다. 그것이 작동하는지 확실하지 않습니다 :(. 방금 <win> Anaconda Prompt
Pieter21

관리자
권한

이것은 실제 문제도 해결하지 못합니다. 의존성 충돌에 대한 대답을 읽으십시오.
Mayou36

-1

내가 사용한 모든 가능한 패키지를 업데이트하려면 conda update --update-all

효과가있다!


4
아니요, "하지"않습니다. OP를 다시 읽으면 종속성 충돌이 발생합니다. 이 답변은 아무것도 해결 하거나 설명 하지 않습니다
Mayou36

-6

이 문제를 condaand로 해결했습니다 pip.

먼저 다음을 실행합니다.

conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5

그 후 cmd를 열고이 코드를 실행하면

pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5

마지막 matplotlib으로이 코드로 pip로 설치해야 합니다.pip install matplotlib


6
이도에 가까운 영업 이익은하고 싶었던 것이 아니다
user8408080을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.