[python] Pipfile과 Pipfile.lock은 어떻게 사용됩니까?

Pipfile / Pipfile.lock은 Python 패키징 컨텍스트에서 requirements.txt를 대체하는 것으로 보입니다. 그러나 실제로 어떻게 작동하는지에 대한 문서는 많지 않습니다. 나는 파이썬 웹 사이트의 PyPi 섹션에 pipfile의 진화 설명 발견 여기를 하지만 꽤 지저분 그리고 파일의 다른 부분의 의미를 설명하지 않습니다.

이 파일들을 이해하는 방법에 대한 조언이 있습니까?



답변

Ruby의 Bundler 또는 Node ‘s Npm에 익숙한 경우 이러한 파일의 개념은 간단하고 기존의 다른 도구와 유사합니다. Pipenv이러한 목표를 달성하기 위해 Pipfile 및 Pipfile.lock 파일을 사용하는 패키지 및 가상 환경 관리 도구입니다.

Pipenv는 하나의 기본 표준 방식으로 가상 환경을 처리합니다 (더 이상 활성화 및 비활성화하지 않아도 됨). 다음은 시작하기위한 기본 사항 입니다. pipenv 웹 사이트 에서 자세한 내용을 참조하십시오 .

시작하기

pipenv는 프로젝트 폴더 유형에서 사용하기 쉽습니다 …

$ pipenv install

requirements.txt파일 이 이미 있으면 Pipfile요구 사항과 가상 환경 폴더가있는 Pipfile파일 이 생성되고 그렇지 않으면 빈 파일 이 생성 됩니다. 설치 한 것에 대해 마음이 맘에 들지 않거나 바뀐 경우 다음을 입력하십시오.

$ pipenv uninstall <package>

… 그리고 당신은 잘 지내요. pipenv가 이미 생성 한 가상 환경을 활성화하려면 다음을 수행하십시오.

$ pipenv shell

… 가상 환경이 활성화됩니다. 환경을 떠나려면 …

$ exit

… 그리고 당신은 원래 터미널 세션으로 돌아갑니다.

핍 파일

Pipfile의 파일은 모두 개발 및 실행에, 파이썬 응용 프로그램 또는 라이브러리에 대한 패키지 요구 사항을 지정하기위한 것입니다. 당신은 단순히 사용하여 패키지를 설치할 수 있습니다 …

$ pipenv install flask

… 배포 및 실행에 대한 종속성으로 추가되거나 …

$ pipenv install --dev pytest

… 개발 시간의 제약으로 사용될 것입니다. 파일 구문은 다음과 같이 매우 간단합니다.

[[source]] # Here goes your package sources (where you are downloading your packages from).
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages] # Here goes your package requirements for running the application and its versions (which packages you will use when running the application).
requests = "*"
flask = "*"
pandas = "*"

[dev-packages] # Here goes your package requirements for developing the application and its versions (which packaes you will use when developing the application)
pylint = "*"
wheel = "*"

[requires] # Here goes your required Python version.
python_version = "3.6"

Pipfile.lock

Pipfile.lock은 에서 패키지 존재를 기반으로 지정하기위한 것입니다 Pipfile 자동으로 서로 의존 패키지를 업그레이드하고 프로젝트 종속성 트리를 파괴의 위험을 피하고, 사람들의 특정 버전을 사용해야합니다.

당신은 사용하여 현재 설치된 패키지를 잠글 수 있습니다 …

$ pipenv lock

…이 도구는 현재 설치된 버전에 따라 자동으로 잠금 파일을 생성하기 위해 가상 환경 폴더를 검색합니다. 파일 구문은 Pipfile 만큼 명확하지 않으므로 간결성을 위해 여기에 표시되지 않습니다.


답변