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

나는 시도 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. 그러나 왜 한 번에 모두 업데이트 할 수 없습니까?



답변

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이러한 환경 내에서 실행 하면이 환경 내의 패키지가 업데이트 됩니다. 그러나 기본 환경도 환경이므로 두 가지 경우 모두 동일한 방식으로 답이 적용됩니다.


답변

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

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 와 같은 기술로 가능합니다 .


답변

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

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

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

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


답변

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


답변

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

효과가있다!


답변

이 문제를 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


답변