[python] 오류없이 “conda install –yes –file requirements.txt”를 사용하여 사용 가능한 패키지 만 설치

다음 명령을 통해 Conda를 사용하여 requirements.txt에 패키지를 설치하는 동안

conda install --yes --file requirements.txt

requirements.txt의 패키지를 사용할 수없는 경우 아래와 같은 “패키지 없음 오류”가 발생합니다.

Anaconda Cloud API 사이트 https://api.anaconda.org 사용

패키지 메타 데이터를 가져 오는 중 : ….

오류 : 현재 linux-64 채널에서 다음과 일치하는 패키지를 찾을 수 없음 : nimfa == 1.2.3

anaconda.org에서이 패키지를 검색 할 수 있습니다.

anaconda search -t conda nimfa ==1.2.3

오류를 발생시키는 대신 requirements.txt에 사용 가능한 모든 패키지를 설치하고 사용할 수없는 패키지에 대해 경고를 표시하도록이 동작을 변경할 수 있습니까?

오류가 표시된 nimfa 패키지를 사용할 수 없으므로 pip를 설치할 수 있기 때문에 이것을 좋아합니다. 따라서 conda install --yes --file requirements.txt사용할 수없는 패키지에 대한 경고 만 표시하도록 의 동작을 변경할 수 있다면 pip install -r requirments.txt.travis.yml 의 명령 으로 후속 조치를 취할 수 있으므로 TravisCI가 사용 가능한 어느 위치에서나 설치를 시도합니다.



답변

나는 파일의 줄을 반복하는 것으로 끝났습니다.

$ while read requirement; do conda install --yes $requirement; done < requirements.txt

편집 : conda를 통해 사용할 수없는 경우 pip를 사용하여 패키지를 설치하려면 다음을 수행하십시오.

$ while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt

편집 : Windows를 사용하는 경우 (크레딧은 @Clay이동 ) :

$ FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"


답변

에서 언급 한 바와 같이이 작업을 수행 할 수

.yml 파일로 내보내기

conda env export > freeze.yml

재현하려면 :

conda env create -f freeze.yml


답변

찾는 사람들을 위해 생선 껍질에 대한 @TillHoffmann의 솔루션으로 이것을 사용했습니다.

$ while read requirement; conda install --yes $requirement; end < requirements.txt

$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt


답변

여기서 Pbms의 대답은 복사 할 기존 환경이 있다고 가정 할 때 올바른 방법입니다. Conda는에 나열된대로 Conda 패키지와 pip 패키지를 모두 설치할 수 있습니다 environment.yml. 전체 프로세스를 더 자세히 문서화하고 싶었습니다. 폴더 기반 환경을 사용 --prefix [path to environment folder]하고 있으므로 대부분의 명령에 추가 했습니다.

다음 env과 같이 현재 폴더에 있는 폴더에 기존 프로젝트의 환경을 설치했다고 가정 해 보겠습니다 .

conda create --prefix ./env

다음 environment.yml과 같이 해당 프로젝트의 환경에 대해 생성 합니다.

conda env export --prefix ./env > environment.yml

다른 폴더에 복사 environment.yml한 다음 실행하여 다른 폴더 내에 새 환경을 만듭니다 .

conda env create --prefix ./env --file environment.yml

environment.yml다시 한 번 environment.yml거기에 복사 한 다음 거기에서 실행 하면 이미 존재하는 환경이 일치 합니다 .

conda env update --prefix ./env --file environment.yml --prune

해당 환경이 활성화 된 상태에서 다음과 같이 패키지 상태를 확인합니다.

conda list

다음은 해당 명령이 인쇄 할 수있는 내용의 요약 된 버전입니다 (pip 패키지는으로 표시됨 pypi).

# Name                    Version                   Build  Channel
pip                       19.2.2                   py37_0
python                    3.7.4                h5263a28_0
numpy                     1.16.4           py37h19fb1c0_0
pandas                    0.25.1           py37ha925a31_0
pyodbc                    4.0.27           py37ha925a31_0
ibm-db                    3.0.1                    pypi_0    pypi
ibm-db-sa                 0.3.5                    pypi_0    pypi

마지막으로 environment.yml다음과 같은 형태의 요약 된 버전입니다 (pip 패키지는 자체 범주에 나열되어 있음).

dependencies:
  - pip=19.2.2=py37_0
  - python=3.7.4=h5263a28_0
  - numpy=1.16.4=py37h19fb1c0_0
  - pandas=0.25.1=py37ha925a31_0
  - pyodbc=4.0.27=py37ha925a31_0
  - pip:
    - ibm-db==3.0.1
    - ibm-db-sa==0.3.5

Conda와 pip를 함께 사용하면 무의식적으로 서로의 의존성을 날려 버릴 수 있기 때문에 속쓰림을 유발할 수 있습니다. 두 패키지를 번갈아 가며 사용하지 말고 먼저 모든 Conda 패키지를 설치 한 다음 나중에 모든 pip 패키지를 설치해야합니다. 환경이 깨지면 공식 권장 사항은 environment.yml파일 에서 삭제하고 다시 만드는 것 입니다. 자세한 내용은 다음 가이드를 참조하세요.

https://www.anaconda.com/using-pip-in-a-conda-environment/


답변