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


132

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

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


2
이것은 루비 세계 Gemfile와 의 직접적인 유사체입니다 Gemfile.lock. .lock파일은 각 의존성에 대한 특정 버전을 가지고 있습니다. 그 확장이없는 것은 알려진 사람 제어 버전 만 가지고 있습니다. 즉, 여전히 발전하고 있으며 잘 정의되지 않고 표준화되지 않은 먼 길에 대한 설명을 요구하는 것은 다소 이른 것입니다.
Charles Duffy

(그리고 유사하게, 차이 Pipfilerequirements.txt이전 시도는, 루비 세계에서 기능을 채택 크게 것으로 예. 여러 환경과 조건 / 옵션 / 등으로 종속 세트를 지정할 수있는 것입니다. 하나의 파일 내에서).
Charles Duffy

1
그것은 이미 Heroku "Python으로 시작하기"repo ( github.com/heroku/python-getting-started.git )에 이미 배포되어있는 것처럼 보이지만 생산 된 것처럼 보입니다.
Stephen

알았어 즉, 문서는 꽤 견고합니다. 나는 단지 그것들을 회복시키지 않는 대답으로 무엇을 쓸 수 있는지 모른다.
Charles Duffy

1
OP에서 만든 링크를 언급하는 경우 여러 가지가 생략됩니다. 예를 들어 실제로 source라는 섹션에있는 것이 무엇을 의미합니까?
Stephen

답변:


166

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 만큼 명확하지 않으므로 간결성을 위해 여기에 표시되지 않습니다.


이것은 흥미로운 답변이지만, 실제로 물어 보았을 때 실제로 무슨 의미인지 이해할 수 [[source]]없었다고 생각합니다. 두 파일의 나머지 부분이 충분히 분명하다고 생각합니다.
Stephen

1
[패키지] / [dev- 패키지] 차이가 중요한지 또는 모든 것을 [패키지]에 넣어야 하는지를 결정해야하는 튜토리얼을 작성하고 있기 때문에 혼란 스러웠습니다. (이것에 대한 인터넷 검색이 나를이 페이지로 이끌었습니다.) 그러나 개발 된 물건을 [패키지]에 넣는 동안 둘 다 가지고 있으면 나를 던졌습니다. 그래도 요청이 [package]에 있어야하는 이유를 알 수있었습니다.
Al Sweigart

1
변경, 요청에 따라, 당신이 의견을 주셔서 감사합니다, 그것은 덜 :) 지금 혼란 희망, 개발 패키지에 혼란을 피하기 위해
danieldeveloper001

1
대부분의 패키지에는 버전이 표시되어 있기 때문에 소스 코드의 발전에 따라 패키지 버전을 추적하려는 경우 좋은 생각이라고 생각합니다 Pipfile. 패키지 업그레이드에서 문제가 발생하면 패키지 버전 기록을 검토하여 문제를 해결할 수 있어야하며 실제로 요청 라이브러리 작성자 중 한 명이 여기에서 수행하는 것이 좋습니다 .
danieldeveloper001

1
@Stephen, pipenv 설치 문서에 명시된 바와 같이 실제로 반대입니다 --skip-lock. Pipfile.lock파일을 사용하도록 강제하지 않고 파일 을 무시하도록 강제로 플래그를 지정할 수 있습니다 .)
danieldeveloper001
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.