다른 컴퓨터에서 Python 작업 환경을 복제하는 방법?


26

내 워크 스테이션에서 Python (Anaconda + Flask)을 사용한 기계 학습 모델을 개발했으며 모든 것이 잘 진행됩니다. 나중에이 프로그램을 다른 컴퓨터에 제공하려고했지만 동일한 환경을 설정하려고했지만 프로그램이 실행되지 않습니다. 프로그램을 원활하게 실행되는 다른 컴퓨터로 프로그램을 복사했습니다.

실패한 경우의 문제를 파악할 수 없습니다 (프로그램 코드와 오류 메시지가 풍부하므로 여기에 제시 할 수 없습니다).하지만 다른 버전의 종속성이있는 것이 거의 확실합니다. .

그래서 내 질문은 특정 프로그램이 잘 실행되는 환경에서 잘 실행되는 다른 프로그램으로 어떻게 복제 할 수 있습니까? 물론 전체 시스템을 복제하지 않고;)


conda env 내보내기를 사용하십시오.
kbrose

답변:


38

우선 이것은 Python / Anaconda 질문이며 다른 스택 교환 하위 사이트에서 요청해야합니다.


질문 자체에 관해서는 다음을 사용하여 Anaconda 환경을 내보낼 수 있습니다.

conda env export > environment.yml

다음을 사용하여 다시 작성하십시오.

conda env create -f environment.yml

다른 사람들이 제안한 것처럼 컴퓨터와 분리 된 특정 환경을 만들고보다 쉽게 ​​관리 할 수있는 가상 환경을 사용해야합니다.

Anaconda에서 가상 환경을 만들려면 다음을 사용할 수 있습니다.

conda create -n yourenvname python=x.x anaconda

다음을 사용하여 활성화하십시오.

source activate yourenvname

Anaconda 설명서는 환경 을 사용 conda create하거나 conda env create공유 / 재생할 때나 명확하지 않습니다 . conda env create이 상황에서 사용을 권장하는 이유를 더 자세히 설명해 주 시겠습니까?
Tanguy

당신은 차이에 대한 몇 가지 메모를 찾을 수 conda createconda env create여기를 : groups.google.com/a/continuum.io/forum/#!topic/conda/... 말했다, 당신이 일반적으로 상호 교환 사용할 수 있다고 생각.
ginge

1
이 스레드를 보았지만 각 옵션 ( conda createvs conda env create)을 선호해야하는 상황과 각 단점 (예 : conda env createpip를 사용하는 패키지가 설치된 환경 )을 정확히 이해하려고합니다 . , 이는 추가 복잡성을 유발합니다 ": 어떤 종류의 추가 복잡성을 추가합니까?
Tanguy

을 실행할 때 conda env create -f environment.ymlyml 파일의 virtenv 이름이 이미 사용 되었기 때문에 오류가 발생할 것을 묻고 싶습니다 . 극복하려면 이름을 새 virtenv로 변경하십시오.
Giang Nguyễn

이런 식으로 당신의 생명을 구할 수 있습니다! Anaconda 환경 관리 페이지 지시 사항을 기반으로 파일에서 환경을 작성하는 경우 다른 플랫폼을 사용하면 작동하지 않습니다. conda list --explicit > FILE_NAME현재 플랫폼의 바이너리를 내보내고 다른 플랫폼에서는 작동하지 않는 것 같습니다.
Shayan Amani

5

가상화보다 더 가벼운 대안 인 Docker ( https://www.docker.com/what-container )와 같은 '컨테이너'를 살펴보십시오 .

약간의 시간 투자가 필요하지만 결국 많은 이점을 제공 할 것입니다.

링크에서 굵은 기울임 꼴로 특정 요구 사항을 표시했습니다 .

개발, 배송 및 배포를 위해 소프트웨어를 표준화 된 단위로 패키지

컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등 실행에 필요한 모든 것을 포함하는 경량의 독립형 실행 가능 소프트웨어 패키지입니다. Linux 및 Windows 기반 앱 모두에서 사용할 수있는 컨테이너화 된 소프트웨어는 환경에 관계없이 항상 동일하게 실행됩니다 . 컨테이너는 개발 환경과 준비 환경의 차이와 같이 주변 환경에서 소프트웨어를 격리하고 동일한 인프라에서 다른 소프트웨어를 실행하는 팀 간의 충돌을 줄입니다.


5

다음을 사용하여 현재 conda 환경의 첫 번째 내보내기 환경 구성 :

conda-env  export -n your_env_name > your_env_name.yml

예:

conda-env  export -n base> base.yml

위의 명령을 실행 한 후에는 현재 디렉토리에있는 yml 구성 파일이어야합니다.

yml 구성 파일을 사용하여 새 환경을 작성하려면 다음을 실행하십시오.

conda-env create -n new_env -f=\path\to\base.yml 

예:

conda-env create -n venv -f=base.yml

위의 방법이 작동하지 않으면 (콘다 자체의 다양한 문제로 인해) 항상 다음 변형을 시도해 볼 가치가 있습니다.

conda-env create --name new_env --file \path\to\base.yml 

4

프로그램이 대부분 Python 인 경우 가상 환경에만 의존 할 수 있습니다.

시스템 라이브러리를 사용하지 않고 가상 환경을 작성하여 종속성을 분리하십시오. 그런 다음 가상 환경 도구를 사용하여 환경을 복제하십시오.

작동하는 virtualenv에서 설치된 각 Python 라이브러리의 버전으로 파일을 작성하십시오.

pip freeze > requirements.txt

새로운 virtualenv pip에서 동일한 버전으로 해당 라이브러리를 설치 하도록 요청 하십시오.

pip install -r requirements.txt

이렇게하면 두 머신에서 동일한 lib 버전을 얻을 수 있습니다. 또한 requirements.txt는 VCS에서 추적하므로 항상 이전 버전의 코드 환경을 다시 만들 수 있습니다.

물론 데이터베이스, 프로덕션 웹 서버 등이 필요한 경우 몇 가지 단계 만 더 거치면 virtualenv를 사용하여 두 환경이 일치하도록 할 수 없습니다. Docker가 들어가는 곳입니다 ( Pieter21의 답변 참조 ).


anaconda귀하의 질문에 태그 가 표시되지 않았습니다 . 나는 이것에 경험이 없지만 조심하십시오. 아나콘다는 환경을 관리하고 아나콘다를 모두 사용하는 방법 virtualenv이 있으며 문제를 일으킬 수 있다고 생각합니다. 그러나 아나콘다는 동등한 기능을 제공해야한다고 생각합니다.
Jérôme

1

이 문서 페이지의 끝에서 :

나중에 사용할 수 있도록 패키지를 저장하십시오.

conda list --export > package-list.txt

내보내기 파일에서 패키지를 다시 설치하십시오.

conda create -n myenv --file package-list.txt

1

다른 환경을 기반으로 환경을 작성하는 기존 방법의 요약 :

  • 환경 복제 :

    • 기존 환경에서 :

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • 동일한 머신의 내 보낸 환경 파일에서 :

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • 다른 머신에서 내 보낸 환경 파일에서 :
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```

$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. 일

0

짧막 한 농담

conda create --clone source_env --name destination_env

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.