Pipfile và Pipfile.lock được sử dụng như thế nào?


130

Có vẻ như Pipfile / Pipfile.lock được dự định là sự thay thế cho tests.txt, trong bối cảnh đóng gói Python. Tuy nhiên, không có nhiều tài liệu về cách thức chúng thực sự hoạt động. Tôi đã tìm thấy một mô tả phát triển của pipfile trên phần PyPi của trang web Python ở đây nhưng nó khá lộn xộn và không giải thích được ngữ nghĩa của các phần khác nhau của tệp.

Bất kỳ con trỏ về làm thế nào để hiểu những tập tin này?


2
Đây là một sự tương tự trực tiếp của GemfileGemfile.locktừ thế giới Ruby: .lockTệp có các phiên bản cụ thể cho từng phụ thuộc; phiên bản không có phần mở rộng đó chỉ có các phiên bản được biết là người kiểm soát. Điều đó nói rằng, yêu cầu một lời giải thích về một cái gì đó vẫn đang phát triển và một chặng đường dài từ việc được xác định rõ, ít tiêu chuẩn hơn, có lẽ là hơi sớm.
Charles Duffy

(Và tương tự, sự khác biệt giữa Pipfilerequirements.txtphần lớn là trước đây cố gắng áp dụng các tính năng từ thế giới Ruby, nghĩa là có thể chỉ định các bộ phụ thuộc cho nhiều môi trường và với các điều kiện / tùy chọn / v.v. trong một tệp duy nhất).
Charles Duffy

1
Có vẻ như nó đã được triển khai trong repo Heroku "bắt đầu với Python" ( github.com/heroku/python-getting-started.git ) nên thích hay không, có vẻ như nó được sản xuất.
Stephen

Gotcha. Điều đó nói rằng - các tài liệu trông khá vững chắc với tôi. Tôi không biết những gì tôi có thể viết trong một câu trả lời sẽ không chỉ là nghỉ ngơi.
Charles Duffy

1
Nếu bạn đang đề cập đến liên kết mà tôi đã tạo trong OP thì có một số điều bị bỏ qua, ví dụ như điều gì thực sự có ý nghĩa đối với một thứ gì đó nằm trong một phần được gọi là nguồn.
Stephen

Câu trả lời:


164

Khái niệm đằng sau các tệp này là đơn giản và tương tự với các công cụ đã có sẵn khác, nếu bạn có chút quen thuộc với Bundler của Ruby hoặc Npm của Node. Pipenvlà cả một công cụ quản lý môi trường ảo và gói sử dụng các tệp Pipfile và Pipfile.lock để đạt được các mục tiêu này.

Pipenv xử lý môi trường ảo cho bạn theo một cách tiêu chuẩn mặc định (không cần kích hoạt và hủy kích hoạt nữa). Dưới đây, một số điều cơ bản để giúp bạn bắt đầu, xem thêm tại trang web pipenv .

Bắt đầu

Bắt đầu sử dụng pipenv thật dễ dàng, trong loại thư mục dự án của bạn ...

$ pipenv install

... và nếu nó đã có một requirements.txttệp, nó sẽ tạo một Pipfiletệp có các yêu cầu và thư mục môi trường ảo, nếu không, nó sẽ tạo một Pipfiletệp trống . Nếu bạn không thích hoặc thay đổi suy nghĩ về thứ gì đó mà bạn đã cài đặt, chỉ cần gõ ...

$ pipenv uninstall <package>

... và bạn tốt để đi. Để kích hoạt môi trường ảo mà pipenv đã tạo, hãy đi với ...

$ pipenv shell

... Và môi trường ảo của bạn sẽ được kích hoạt. Rời khỏi môi trường ...

$ exit

... và bạn sẽ trở lại phiên thiết bị đầu cuối ban đầu của bạn.

Đường ống

Tệp Pipfile nhằm xác định các yêu cầu gói cho ứng dụng hoặc thư viện Python của bạn, cả để phát triển và thực thi. Bạn có thể cài đặt một gói bằng cách sử dụng ...

$ pipenv install flask

... và nó sẽ được thêm vào như một phần phụ thuộc để triển khai và thực thi hoặc bằng cách sử dụng ...

$ pipenv install --dev pytest

... Và nó sẽ được sử dụng như một sự suy giảm cho thời gian phát triển. Cú pháp tập tin là khá thẳng về phía trước, như sau.

[[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

Các Pipfile.lock được thiết kế để xác định, căn cứ vào các gói có mặt trong Pipfile , phiên bản cụ thể của những nên được sử dụng, tránh những rủi ro của tự động nâng cấp các gói phụ thuộc lẫn nhau và phá vỡ cây phụ thuộc dự án của bạn.

Bạn có thể khóa các gói hiện đang cài đặt của mình bằng cách sử dụng ...

$ pipenv lock

... Và công cụ sẽ tự động tra cứu thư mục môi trường ảo của bạn để tạo tệp khóa cho bạn, dựa trên các phiên bản hiện được cài đặt. Cú pháp tệp không rõ ràng như đối với Pipfile , vì vậy để đảm bảo tính đơn giản, nó sẽ không được hiển thị ở đây.


Đây là một câu trả lời thú vị, nhưng tôi nghĩ khi tôi hỏi tôi không thể hiểu ý nghĩa thực sự của nó là gì [[source]], như là nguồn cho các gói được tải xuống bởi pipenv hay cái gì khác? Tôi đoán phần còn lại của hai tập tin là đủ rõ ràng.
Stephen

1
Tôi sẽ thừa nhận, tôi thấy khó hiểu vì tôi đang làm việc trên một hướng dẫn mà tôi phải quyết định xem sự khác biệt [gói] / [dev-pack] có quan trọng không, hoặc liệu tôi có nên đặt mọi thứ vào [gói] không. (Googling cho điều này là những gì dẫn tôi đến trang này.) Nhưng có cả hai trong khi đưa công cụ dev vào [gói] loại đã ném tôi. Tôi có thể thấy lý do tại sao các yêu cầu phải ở trong [gói] mặc dù.
Al Sweigart

1
Đã thay đổi, theo yêu cầu, để tránh nhầm lẫn về các gói phát triển, cảm ơn bạn đã bình luận, hy vọng nó sẽ ít gây nhầm lẫn hơn :)
danieldeveloper001

1
Tôi nghĩ rằng đó là một ý tưởng tốt, nếu bạn muốn theo dõi các phiên bản gói trong quá trình phát triển mã nguồn, vì hầu hết các gói sẽ được gắn phiên bản Pipfile. Nếu một cái gì đó bị hỏng khi nâng cấp gói, thì người ta có thể sửa nó bằng cách xem lại lịch sử phiên bản gói và thực sự, một trong những người tạo thư viện yêu cầu khuyên bạn nên thực hiện ở đây .
danieldeveloper001

1
@Stephen, thực tế thì ngược lại, như đã nêu trong tài liệu cài đặt pipenv, bạn có thể chỉ định --skip-lockcờ để buộc nó bỏ qua Pipfile.locktệp thay vì buộc nó sử dụng nó;)
danieldeveloper001
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.