Công cụ đóng gói trong Python là gì?
Tại buổi gặp mặt Python Frederick tuần trước, tôi đã nói chuyện về bao bì Python. Mục đích của tôi là đề cập đến cách thức hoạt động của bao bì và cách xây dựng một gói cơ bản. Trong suốt buổi nói chuyện, chúng tôi đã sử dụng một số công cụ mà tôi nghĩ là rất quan trọng để phát hành gói Python cho PyPI. Tôi sẽ mô tả những công cụ này và lý do tại sao tôi nghĩ chúng quan trọng Show
chất độctox là một công cụ tuyệt vời để kiểm tra bao bì. Với lệnh 61, nhà phát triển có thể xây dựng gói, cài đặt gói đó vào môi trường ảo cho phiên bản Python cụ thể và chạy gói thông qua bộ thử nghiệm của nóPhiên bản ngắn của running tox trông giống như
Lệnh này sẽ chạy bộ thử nghiệm của gói đối với Python 3. 6. Tôi thích nó khi các lệnh thanh lịch. Để làm được điều đó, nhà phát triển phải cho tox biết cách chạy bộ thử nghiệm. Cấu hình này được thực hiện trong tệp 62. Một tập tin tối thiểu có thể trông giống như
Trong ví dụ này, bạn sẽ thay đổi 63 thành tên dự án của bạn. Đây là thông tin đủ để thông báo cho tox về cách chạy bộ thử nghiệm của bạnTôi thấy rằng việc sử dụng tox giúp tôi tránh được các lỗi đóng gói khó phát hiện (bạn có biết chúng tồn tại không?) và nói chung là tuyệt vời để thử nghiệm trên nhiều phiên bản Python quanh cosợi xe là một công cụ quan trọng trong bộ công cụ của nhà đóng gói vì một lý do. nó cho phép bạn tải lên PyPI qua HTTPS. Ngược lại, 64 sử dụng HTTP không an toàn cho nhiều phiên bản PythonMặc dù có vẻ ngớ ngẩn nhưng bạn cần một gói riêng để tải lên an toàn qua HTTPS. Tôi cho rằng có những lý do chính đáng cho yêu cầu đó mà tôi không biết 65 tạo một thư mục 66 với các gói để tải lên. (Biên tập. Ghi chú. Xin chào từ 2021. Cộng đồng Python đã ngừng sử dụng trực tiếp 67. Thay vào đó, để xây dựng các gói của bạn, hãy sử dụng một công cụ như bản dựng). Bạn có thể thực hiện tải lên của mình với
Tóm lượcHệ sinh thái Python có tài liệu tuyệt vời về đóng gói tại Hướng dẫn sử dụng bao bì Python. Bài đăng này nhằm mục đích giới thiệu nhẹ nhàng về một vài công cụ rất có giá trị khi bạn muốn làm việc với các gói (Vâng, tôi biết một "gói" về mặt kỹ thuật được gọi là "phân phối" trong biệt ngữ Python thích hợp, nhưng tôi đã sử dụng thuật ngữ này vì nó được chấp nhận rộng rãi hơn trong nhiều ngôn ngữ lập trình. ) Thư viện này cung cấp các tiện ích triển khai các thông số kỹ thuật về khả năng tương tác rõ ràng có một hành vi đúng (ví dụ:. PEP 440) hoặc hưởng lợi rất nhiều từ việc có một triển khai được chia sẻ duy nhất (ví dụ:. PEP 425) Dự án đóng gói bao gồm những điều sau đây. xử lý phiên bản, chỉ định, đánh dấu, yêu cầu, thẻ, tiện ích Lịch sử dự ánVui lòng xem lại THAY ĐỔI. tệp đầu tiên hoặc tài liệu Nhật ký thay đổi cho các thay đổi gần đây và lịch sử dự án Pipenv là một công cụ đóng gói dành cho Python giúp giải quyết một số vấn đề phổ biến liên quan đến quy trình làm việc điển hình bằng cách sử dụng 8, 9 và 0 cũNgoài việc giải quyết một số vấn đề phổ biến, nó hợp nhất và đơn giản hóa quy trình phát triển thành một công cụ dòng lệnh duy nhất Hướng dẫn này sẽ giới thiệu những vấn đề mà Pipenv giải quyết và cách quản lý các phần phụ thuộc Python của bạn với Pipenv. Ngoài ra, nó sẽ đề cập đến cách Pipenv phù hợp với các phương pháp phân phối gói trước đây Tiền thưởng miễn phí. Nhấp vào đây để truy cập lớp học 5 ngày miễn phí chỉ cho bạn cách tránh các sự cố quản lý phụ thuộc phổ biến với các công cụ như Pip, PyPI, Virtualenv và các tệp yêu cầu Các vấn đề mà Pipenv giải quyếtĐể hiểu được lợi ích của Pipenv, điều quan trọng là phải xem qua các phương pháp hiện tại để đóng gói và quản lý phụ thuộc trong Python Hãy bắt đầu với một tình huống điển hình về việc xử lý các gói của bên thứ ba. Sau đó, chúng tôi sẽ xây dựng cách triển khai một ứng dụng Python hoàn chỉnh Loại bỏ các quảng cáoQuản lý phụ thuộc với package_c>=1.0,<=2.0 package_a package_b 0Hãy tưởng tượng bạn đang làm việc trên một dự án Python sử dụng gói của bên thứ ba như 2. Bạn sẽ cần chỉ định yêu cầu đó để các nhà phát triển và hệ thống tự động khác có thể chạy ứng dụng của bạnVì vậy, bạn quyết định đưa phần phụ thuộc 2 vào tệp 0 0Tuyệt vời, mọi thứ hoạt động tốt tại địa phương và sau khi hack ứng dụng của bạn một lúc, bạn quyết định chuyển nó sang sản xuất. Đây là nơi mọi thứ trở nên hơi đáng sợ… Tệp 0 ở trên không chỉ định phiên bản 2 nào sẽ sử dụng. Trong trường hợp này, theo mặc định, 7 sẽ cài đặt phiên bản mới nhất. Điều này không sao trừ khi có những thay đổi về giao diện hoặc hành vi trong phiên bản mới nhất làm hỏng ứng dụng của chúng tôiVì lợi ích của ví dụ này, giả sử rằng một phiên bản mới của 2 đã được phát hành. Tuy nhiên, nó không tương thích ngược với phiên bản bạn đã sử dụng trong quá trình phát triểnBây giờ, giả sử bạn triển khai ứng dụng của mình vào sản xuất và thực hiện một 7. Pip nhận phiên bản mới nhất, không tương thích ngược của 2 và cứ như vậy, ứng dụng của bạn bị hỏng… trong quá trình sản xuất“Nhưng này, nó hoạt động trên máy của tôi. ” —Bản thân tôi đã từng đến đó, và đó không phải là một cảm giác tuyệt vời Tại thời điểm này, bạn biết rằng phiên bản 2 mà bạn đã sử dụng trong quá trình phát triển hoạt động tốt. Vì vậy, để khắc phục mọi thứ, bạn hãy cố gắng cụ thể hơn một chút trong 0 của mình. Bạn thêm một trình xác định phiên bản vào phần phụ thuộc 2. Điều này còn được gọi là ghim một phụ thuộc 0Việc ghim phần phụ thuộc của 2 vào một phiên bản cụ thể đảm bảo rằng một 7 sẽ thiết lập đúng phiên bản của 2 mà bạn đã sử dụng trong quá trình phát triển. Nhưng nó thực sự?Hãy nhớ rằng bản thân 2 cũng có các phần phụ thuộc (mà 8 tự động cài đặt). Tuy nhiên, bản thân 2 không chỉ định các phiên bản chính xác cho các phần phụ thuộc của nó. Ví dụ: nó cho phép mọi phiên bản của 70Một lần nữa, vì lợi ích của ví dụ này, giả sử một phiên bản mới của 71 đã được phát hành, nhưng nó gây ra lỗi chặn hiển thị cho ứng dụng của bạnKhi bạn thực hiện 7 trong quá trình sản xuất lần này, bạn sẽ nhận được 73 vì bạn đã ghim yêu cầu đó. Tuy nhiên, thật không may, bạn sẽ nhận được phiên bản mới nhất, có lỗi của 71. Một lần nữa, sản phẩm bị hỏng trong sản xuấtVấn đề thực sự ở đây là bản dựng không mang tính quyết định. Ý tôi là, với cùng một đầu vào (tệp 0), pip không phải lúc nào cũng tạo ra cùng một môi trường. Hiện tại, bạn không thể dễ dàng sao chép môi trường chính xác mà bạn có trên máy phát triển của mình trong sản xuấtGiải pháp điển hình cho vấn đề này là sử dụng 76. Lệnh này cho phép bạn nhận các phiên bản chính xác cho tất cả thư viện bên thứ 3 hiện được cài đặt, bao gồm cả pip phụ thuộc được cài đặt tự động. Vì vậy, bạn có thể đóng băng mọi thứ trong quá trình phát triển để đảm bảo rằng bạn có cùng một môi trường trong quá trình sản xuấtViệc thực thi 76 dẫn đến các phụ thuộc được ghim mà bạn có thể thêm vào một 0 6Với các phụ thuộc được ghim này, bạn có thể đảm bảo rằng các gói được cài đặt trong môi trường sản xuất của bạn khớp chính xác với các gói trong môi trường phát triển của bạn, vì vậy sản phẩm của bạn không bị hỏng bất ngờ. Thật không may, “giải pháp” này lại dẫn đến một loạt vấn đề mới Bây giờ bạn đã chỉ định các phiên bản chính xác của mọi gói bên thứ ba, bạn chịu trách nhiệm cập nhật các phiên bản này, mặc dù chúng là phần phụ thuộc của 2. Điều gì sẽ xảy ra nếu có một lỗ hổng bảo mật được phát hiện trong 80 và những người bảo trì gói đã ngay lập tức vá trong 81? Trước tiên, bạn cần lưu ý rằng có vấn đề với phiên bản bạn có. Sau đó, bạn cần tải phiên bản mới trong môi trường sản xuất của mình trước khi ai đó khai thác lỗ hổng bảo mật. Vì vậy, bạn phải thay đổi thủ công 0 của mình để chỉ định phiên bản mới 81. Như bạn có thể thấy trong tình huống này, trách nhiệm cập nhật các bản cập nhật cần thiết thuộc về bạnSự thật là bạn thực sự không quan tâm phiên bản nào của 71 được cài đặt miễn là nó không phá mã của bạn. Trên thực tế, bạn có thể muốn phiên bản mới nhất đảm bảo rằng bạn sẽ nhận được các bản sửa lỗi, bản vá bảo mật, tính năng mới, tối ưu hóa hơn, v.v.câu hỏi thực sự là. “Làm cách nào để bạn cho phép các bản dựng xác định cho dự án Python của mình mà không chịu trách nhiệm cập nhật các phiên bản của phần phụ thuộc?” Loại bỏ các quảng cáo Phát triển các dự án với các phụ thuộc khác nhauHãy chuyển hướng một chút để nói về một vấn đề phổ biến khác phát sinh khi bạn làm việc trên nhiều dự án. Hãy tưởng tượng rằng 87 cần 88, nhưng 89 cần 80Theo mặc định, Python cố gắng lưu trữ tất cả các gói bên thứ ba của bạn ở một vị trí trên toàn hệ thống. Điều này có nghĩa là mỗi khi bạn muốn chuyển đổi giữa 87 và 89, bạn phải đảm bảo đã cài đặt đúng phiên bản của 83. Điều này làm cho việc chuyển đổi giữa các dự án trở nên khó khăn vì bạn phải gỡ cài đặt và cài đặt lại các gói để đáp ứng các yêu cầu cho từng dự ánGiải pháp tiêu chuẩn là sử dụng một môi trường ảo có bộ lưu trữ gói của bên thứ ba và có thể thực thi Python của riêng nó. Bằng cách đó, 87 và 89 được phân tách đầy đủ. Giờ đây, bạn có thể dễ dàng chuyển đổi giữa các dự án vì chúng không chia sẻ cùng một vị trí lưu trữ gói. 86 có thể có bất kỳ phiên bản nào của 83 mà nó cần trong môi trường của chính nó và 88 có thể có những gì nó cần hoàn toàn riêng biệt. Một công cụ rất phổ biến cho việc này là 9 (hoặc 80 trong Python 3)Pipenv được tích hợp tính năng quản lý môi trường ảo để bạn có một công cụ duy nhất để quản lý gói của mình Độ phân giải phụ thuộcÝ tôi là gì khi giải quyết sự phụ thuộc?
Giả sử 82 có phụ thuộc phụ thuộc vào 83 và 82 yêu cầu một phiên bản cụ thể của gói này. 85. Đổi lại, 86 có cùng phụ thuộc nhưng cần 87Lý tưởng nhất là khi bạn cố gắng cài đặt 82 và 86, công cụ cài đặt sẽ xem xét các yêu cầu dành cho 83 (là 001 và 002) và chọn một phiên bản đáp ứng các yêu cầu đó. Bạn hy vọng rằng công cụ sẽ giải quyết các phụ thuộc để cuối cùng chương trình của bạn hoạt động. Đây là những gì tôi có nghĩa là "độ phân giải phụ thuộc. ”Thật không may, hiện tại bản thân pip không có độ phân giải phụ thuộc thực sự, nhưng có một vấn đề mở để hỗ trợ nó Cách pip sẽ xử lý tình huống trên như sau
Đây là nơi rắc rối (có khả năng) bắt đầu Nếu phiên bản của 83 do pip chọn không phù hợp với các yêu cầu trong tương lai (chẳng hạn như 86 cần 87), quá trình cài đặt sẽ không thành công“Giải pháp” cho vấn đề này là chỉ định phạm vi cần thiết cho phụ thuộc phụ ( 83) trong tệp 0. Bằng cách đó, pip có thể giải quyết xung đột này và cài đặt gói đáp ứng các yêu cầu đó
Tuy nhiên, cũng giống như trước đây, giờ đây bạn đang trực tiếp quan tâm đến bản thân với các yếu tố phụ thuộc ( 83). Vấn đề với điều này là nếu 82 thay đổi yêu cầu của họ mà bạn không biết, thì các yêu cầu bạn đã chỉ định ( 015) có thể không còn được chấp nhận nữa và quá trình cài đặt có thể bị lỗi… lần nữa. Vấn đề thực sự là một lần nữa, bạn chịu trách nhiệm cập nhật các yêu cầu của phụ thuộcLý tưởng nhất là công cụ cài đặt của bạn đủ thông minh để cài đặt các gói đáp ứng tất cả các yêu cầu mà bạn không cần chỉ định rõ ràng các phiên bản phụ thuộc Giới thiệu PipenvBây giờ chúng tôi đã giải quyết các vấn đề, hãy xem cách Pipenv giải quyết chúng Đầu tiên, hãy cài đặt nó 6Khi bạn đã hoàn thành việc đó, bạn có thể quên đi 8 một cách hiệu quả vì về cơ bản, Pipenv đóng vai trò thay thế. Nó cũng giới thiệu hai tệp mới, 017 (có nghĩa là để thay thế 0) và 019 (cho phép các bản dựng xác định)Pipenv sử dụng 8 và 9 hoàn toàn nhưng đơn giản hóa việc sử dụng chúng bằng một giao diện dòng lệnh duy nhấtLoại bỏ các quảng cáoVí dụ sử dụngHãy bắt đầu lại với việc tạo ứng dụng Python tuyệt vời của bạn. Đầu tiên, sinh ra một vỏ trong môi trường ảo để cô lập sự phát triển của ứng dụng này 7Điều này sẽ tạo ra một môi trường ảo nếu một môi trường chưa tồn tại. Pipenv tạo tất cả các môi trường ảo của bạn ở một vị trí mặc định. Nếu bạn muốn thay đổi hành vi mặc định của Pipenv, có một số Bạn có thể buộc tạo môi trường Python 2 hoặc 3 bằng các đối số tương ứng là 022 và 023. Nếu không, Pipenv sẽ sử dụng bất kỳ thứ gì mặc định mà 9 tìm thấy
Bây giờ bạn có thể cài đặt gói bên thứ 3 mà bạn cần, 2. Ồ, nhưng bạn biết rằng bạn cần phiên bản 028 chứ không phải phiên bản mới nhất, vì vậy hãy tiếp tục và cụ thể 8Bạn sẽ thấy một cái gì đó như sau trong thiết bị đầu cuối của mình 8Bạn sẽ nhận thấy rằng có hai tệp được tạo, một tệp 017 và tệp 019. Chúng ta sẽ xem xét kỹ hơn những điều này trong giây lát. Hãy cài đặt một gói bên thứ 3 khác, 031, để xử lý số liệu. Bạn không cần một phiên bản cụ thể, vì vậy đừng chỉ định một phiên bản 8Nếu bạn muốn cài đặt thứ gì đó trực tiếp từ hệ thống kiểm soát phiên bản (VCS), bạn có thể. Bạn chỉ định các vị trí tương tự như cách bạn làm như vậy với 8. Ví dụ: để cài đặt thư viện 033 từ kiểm soát phiên bản, hãy làm như sau 00Lưu ý đối số 034 ở trên để cài đặt có thể chỉnh sửa được. Hiện tại, để Pipenv thực hiện giải quyết phụ thuộcGiả sử bạn cũng có một số bài kiểm tra đơn vị cho ứng dụng tuyệt vời này và bạn muốn sử dụng 035 để chạy chúng. Bạn không cần 035 trong quá trình sản xuất, vì vậy bạn có thể chỉ định rằng phần phụ thuộc này chỉ dành cho quá trình phát triển với đối số 037 01Việc cung cấp đối số 037 sẽ đặt phần phụ thuộc vào một vị trí đặc biệt của 039 trong 017. Các gói phát triển này chỉ được cài đặt nếu bạn chỉ định đối số 037 với 042Các phần khác nhau tách biệt các phần phụ thuộc chỉ cần thiết để phát triển với phần phụ thuộc cần thiết để mã cơ sở thực sự hoạt động. Thông thường, điều này sẽ được thực hiện với các tệp yêu cầu bổ sung như 043 hoặc 044. Bây giờ, mọi thứ được hợp nhất trong một 017 duy nhất dưới các phần khác nhauĐược rồi, giả sử bạn có mọi thứ hoạt động trong môi trường phát triển cục bộ của mình và bạn đã sẵn sàng đưa nó vào sản xuất. Để làm điều đó, bạn cần khóa môi trường của mình để có thể đảm bảo rằng bạn có môi trường tương tự trong quá trình sản xuất 02Thao tác này sẽ tạo/cập nhật 019 của bạn mà bạn sẽ không bao giờ cần (và không bao giờ có ý định) chỉnh sửa theo cách thủ công. Bạn phải luôn sử dụng tệp được tạoBây giờ, sau khi bạn nhận được mã và 019 trong môi trường sản xuất của mình, bạn nên cài đặt môi trường thành công cuối cùng được ghi lại 03Điều này yêu cầu Pipenv bỏ qua 017 để cài đặt và sử dụng những gì có trong 019. Với 019 này, Pipenv sẽ tạo chính xác môi trường mà bạn đã có khi chạy 051, phụ thuộc phụ và tất cảTệp khóa cho phép các bản dựng xác định bằng cách chụp nhanh tất cả các phiên bản của gói trong một môi trường (tương tự như kết quả của 76)Bây giờ, giả sử một nhà phát triển khác muốn thực hiện một số bổ sung cho mã của bạn. Trong tình huống này, họ sẽ lấy mã, bao gồm cả 017 và sử dụng lệnh này 04Thao tác này sẽ cài đặt tất cả các phần phụ thuộc cần thiết cho quá trình phát triển, bao gồm cả phần phụ thuộc thông thường và phần phụ thuộc mà bạn đã chỉ định với đối số 037 trong thời gian 055
Đây là một lưu ý quan trọng vì nó giải quyết một số vấn đề trước đây chúng ta đã thảo luận. Để chứng minh, giả sử một phiên bản mới của một trong các phần phụ thuộc của bạn có sẵn. Vì bạn không cần phiên bản cụ thể của phần phụ thuộc này nên bạn không chỉ định phiên bản chính xác trong 017. Khi bạn 042, phiên bản phụ thuộc mới sẽ được cài đặt trong môi trường phát triển của bạnBây giờ, bạn thực hiện các thay đổi của mình đối với mã và chạy một số thử nghiệm để xác minh mọi thứ vẫn hoạt động như mong đợi. (Bạn có các bài kiểm tra đơn vị phải không?) Bây giờ, giống như trước đây, bạn khóa môi trường của mình bằng 051 và một bản cập nhật 019 sẽ được tạo với phiên bản phụ thuộc mới. Giống như trước đây, bạn có thể tái tạo môi trường mới này trong sản xuất bằng tệp khóaNhư bạn có thể thấy từ kịch bản này, bạn không còn phải ép buộc các phiên bản chính xác mà bạn không thực sự cần để đảm bảo môi trường sản xuất và phát triển của bạn giống nhau. Bạn cũng không cần phải luôn cập nhật các phụ thuộc phụ mà bạn “không quan tâm. ” Quy trình công việc này với Pipenv, kết hợp với thử nghiệm xuất sắc của bạn, khắc phục các sự cố khi thực hiện thủ công tất cả hoạt động quản lý phụ thuộc của bạn Loại bỏ các quảng cáoPhương pháp tiếp cận giải quyết phụ thuộc của PipenvPipenv sẽ cố gắng cài đặt các phụ thuộc phụ đáp ứng tất cả các yêu cầu từ các phụ thuộc cốt lõi của bạn. Tuy nhiên, nếu có các phụ thuộc xung đột ( 82 cần 85, nhưng 86 cần 064), Pipenv sẽ không thể tạo tệp khóa và sẽ xuất ra lỗi như sau 05Như đã cảnh báo, bạn cũng có thể hiển thị biểu đồ phụ thuộc để hiểu các phụ thuộc cấp cao nhất của mình và các phụ thuộc phụ của chúng 06Lệnh này sẽ in ra một cấu trúc dạng cây hiển thị các phần phụ thuộc của bạn. Đây là một ví dụ 07Từ đầu ra của 065, bạn có thể thấy các gói phụ thuộc cấp cao nhất mà chúng tôi đã cài đặt trước đó ( 066, 031, 035 và 033) và bên dưới, bạn có thể thấy các gói mà chúng phụ thuộc vàoNgoài ra, bạn có thể đảo ngược cây để hiển thị các thành phần phụ thuộc với cha yêu cầu nó 08Cây đảo ngược này có thể hữu ích hơn khi bạn đang cố gắng tìm ra các phụ thuộc phụ xung đột PipfilePipfile dự định thay thế 0. Pipenv hiện là triển khai tham chiếu để sử dụng 017. Có vẻ như rất có khả năng rằng. Ngoài ra, điều đáng chú ý làCú pháp của 017 là TOML và tệp được chia thành các phần. 039 cho các gói chỉ dành cho phát triển, 075 cho các gói yêu cầu tối thiểu và 076 cho các yêu cầu khác như phiên bản cụ thể của Python. Xem một tập tin ví dụ dưới đây 09Lý tưởng nhất là bạn không nên có bất kỳ phụ thuộc phụ nào trong 017 của mình. Điều tôi muốn nói là bạn chỉ nên bao gồm các gói bạn thực sự nhập và sử dụng. Không cần giữ 078 trong 017 của bạn chỉ vì nó là phụ thuộc phụ của 033. (Pipenv sẽ cài đặt tự động. ) 017 phải truyền đạt các phụ thuộc cấp cao nhất mà gói của bạn yêu cầuPipfile. KhóaTệp này cho phép các bản dựng xác định bằng cách chỉ định các yêu cầu chính xác để tái tạo một môi trường. Nó chứa các phiên bản chính xác cho các gói và hàm băm để hỗ trợ xác minh an toàn hơn, điều này cũng. Một tệp ví dụ có thể trông giống như sau. Lưu ý rằng cú pháp của tệp này là JSON và tôi đã loại trừ các phần của tệp bằng 083 60Lưu ý phiên bản chính xác được chỉ định cho mọi phụ thuộc. Ngay cả các phụ thuộc phụ như 084 không có trong 017 của chúng tôi cũng xuất hiện trong 019 này. Các giá trị băm được sử dụng để đảm bảo bạn đang truy xuất gói giống như bạn đã làm trong quá trình phát triểnCần lưu ý một lần nữa rằng bạn không bao giờ được thay đổi tệp này bằng tay. Nó có nghĩa là được tạo ra với 051Loại bỏ các quảng cáoCác tính năng bổ sung của PipenvMở gói của bên thứ ba trong trình chỉnh sửa mặc định của bạn bằng lệnh sau 61Thao tác này sẽ mở gói 2 trong trình chỉnh sửa mặc định hoặc bạn có thể chỉ định chương trình có biến môi trường 089. Ví dụ mình dùng Sublime Text nên chỉ đặt 090. Điều này làm cho việc tìm hiểu bên trong gói bạn đang sử dụng trở nên cực kỳ đơn giảnBạn có thể chạy một lệnh trong môi trường ảo mà không cần khởi chạy shell 62Kiểm tra các lỗ hổng bảo mật (và yêu cầu PEP 508) trong môi trường của bạn 63Bây giờ, giả sử bạn không cần gói nữa. Bạn có thể gỡ cài đặt nó 64Ngoài ra, giả sử bạn muốn xóa hoàn toàn tất cả các gói đã cài đặt khỏi môi trường ảo của mình 65Bạn có thể thay thế 091 bằng 092 để xóa các gói devPipenv hỗ trợ tự động tải các biến môi trường khi tệp 093 tồn tại trong thư mục cấp cao nhất. Theo cách đó, khi bạn 094 mở môi trường ảo, nó sẽ tải các biến môi trường của bạn từ tệp. Tệp 093 chỉ chứa các cặp khóa-giá trị 66Cuối cùng, đây là một số lệnh nhanh để tìm xem đồ đạc ở đâu. Cách tìm ra môi trường ảo của bạn ở đâu 67Làm thế nào để tìm ra nơi dự án nhà của bạn là 68Loại bỏ các quảng cáoPhân phối góiBạn có thể hỏi tất cả điều này hoạt động như thế nào nếu bạn định phân phối mã của mình dưới dạng gói Có, tôi cần phân phối mã của mình dưới dạng góiPipenv hoạt động như thế nào với các tệp 096?Có rất nhiều sắc thái cho câu hỏi đó. Đầu tiên, tệp 096 là cần thiết khi bạn đang sử dụng 098 làm hệ thống xây dựng/phân phối của mình. Đây đã là tiêu chuẩn thực tế trong một thời gian, nhưng những thay đổi gần đây đã khiến việc sử dụng 098 trở thành tùy chọnĐiều này có nghĩa là các dự án như flit có thể sử dụng 600 mới để chỉ định một hệ thống xây dựng khác không yêu cầu 096Tất cả những gì đang được nói, trong tương lai gần 098 và một 096 đi kèm vẫn sẽ là lựa chọn mặc định của nhiều ngườiĐây là quy trình công việc được đề xuất khi bạn đang sử dụng 096 như một cách để phân phối gói hàng của mình
Để làm rõ, hãy đặt các yêu cầu tối thiểu của bạn vào 096 thay vì trực tiếp với 042. Sau đó, sử dụng lệnh 609 để cài đặt gói của bạn dưới dạng có thể chỉnh sửa. Điều này nhận được tất cả các yêu cầu từ 096 vào môi trường của bạn. Sau đó, bạn có thể sử dụng 051 để có được môi trường có thể tái tạoTôi không cần phân phối mã của mình dưới dạng góiTuyệt quá. Nếu bạn đang phát triển một ứng dụng không nhằm mục đích phân phối hoặc cài đặt (trang web cá nhân, ứng dụng dành cho máy tính để bàn, trò chơi hoặc tương tự), bạn không thực sự cần một 096Trong tình huống này, bạn có thể sử dụng kết hợp 017/ 019 để quản lý các thành phần phụ thuộc của mình với quy trình được mô tả trước đó nhằm triển khai một môi trường có thể tái sản xuất trong sản xuấtTôi đã có một package_c>=1.0,<=2.0 package_a package_b 0. Làm cách nào để chuyển đổi sang $ twine upload dist/* 017?Nếu bạn chạy 042, nó sẽ tự động phát hiện 0 và chuyển đổi nó thành 017, xuất ra kết quả như sau 69
Nếu bạn đã ghim các phiên bản chính xác trong tệp 0 của mình, có thể bạn sẽ muốn thay đổi 017 của mình để chỉ chỉ định các phiên bản chính xác mà bạn thực sự yêu cầu. Điều này sẽ cho phép bạn đạt được những lợi ích thực sự của việc chuyển đổi. Ví dụ: giả sử bạn có những thứ sau đây nhưng thực sự không cần phiên bản chính xác của 031 0Nếu bạn không có bất kỳ yêu cầu phiên bản cụ thể nào cho các phần phụ thuộc của mình, bạn có thể sử dụng ký tự đại diện 630 để cho Pipenv biết rằng bất kỳ phiên bản nào cũng có thể được cài đặt 1Nếu bạn cảm thấy lo lắng về việc cho phép bất kỳ phiên bản nào với 630, thì cách an toàn nhất là chỉ định lớn hơn hoặc bằng phiên bản bạn đang sử dụng để bạn vẫn có thể tận dụng các phiên bản mới 2Tất nhiên, luôn cập nhật các bản phát hành mới cũng có nghĩa là bạn chịu trách nhiệm đảm bảo mã của mình vẫn hoạt động như mong đợi khi các gói thay đổi. Điều này có nghĩa là một bộ thử nghiệm là cần thiết cho toàn bộ quy trình Pipenv này nếu bạn muốn đảm bảo các bản phát hành mã của mình hoạt động hiệu quả Bạn cho phép các gói cập nhật, chạy thử nghiệm, đảm bảo tất cả chúng đều vượt qua, khóa môi trường của bạn và sau đó bạn có thể yên tâm khi biết rằng mình chưa giới thiệu các thay đổi vi phạm. Nếu mọi thứ bị hỏng do phụ thuộc, bạn có một số bài kiểm tra hồi quy để viết và có thể có thêm một số hạn chế đối với các phiên bản phụ thuộc Ví dụ: nếu 632 được cài đặt sau khi chạy 042 và nó phá vỡ mã của bạn, điều mà bạn hy vọng sẽ nhận thấy trong quá trình phát triển hoặc trong quá trình thử nghiệm của mình, thì bạn có một số tùy chọn
Tùy chọn 1 được ưu tiên hơn vì nó đảm bảo rằng mã của bạn đang sử dụng các phụ thuộc cập nhật nhất. Tuy nhiên, Tùy chọn 2 mất ít thời gian hơn và không yêu cầu thay đổi mã, chỉ hạn chế về phụ thuộc Bạn cũng có thể cài đặt từ các tệp yêu cầu với cùng đối số 637 mà 8 mất 5Nếu bạn có 043 hoặc thứ gì đó tương tự, bạn cũng có thể thêm chúng vào 017. Chỉ cần thêm đối số 037 để nó được đưa vào đúng phần 6Ngoài ra, bạn có thể thực hiện theo cách khác và tạo các tệp yêu cầu từ 017 7Loại bỏ các quảng cáoCái gì tiếp theo?Đối với tôi, có vẻ như tiến trình tự nhiên cho hệ sinh thái Python sẽ là một hệ thống xây dựng sử dụng 017 để cài đặt các phụ thuộc tối thiểu cần thiết khi truy xuất và xây dựng gói từ chỉ mục gói (như PyPI). Điều quan trọng cần lưu ý một lần nữa là đặc tả thiết kế Pipfile vẫn đang được phát triển và Pipenv chỉ là một triển khai tham khảoĐiều đó đang được nói, tôi có thể thấy một tương lai nơi phần 606 của 096 không tồn tại và thay vào đó, 017 được tham chiếu cho các yêu cầu tối thiểu. Hoặc 096 đã biến mất hoàn toàn và bạn nhận được siêu dữ liệu cũng như thông tin khác theo một cách khác, vẫn sử dụng 017 để nhận các phụ thuộc cần thiếtPipenv có đáng để kiểm tra không?Chắc chắn. Ngay cả khi đó chỉ là một cách để hợp nhất các công cụ bạn đã sử dụng ( 8 & 9) vào một giao diện duy nhất. Tuy nhiên, nó còn hơn thế nữa. Với việc bổ sung 017, bạn chỉ xác định các phụ thuộc mà bạn thực sự cầnBạn không còn phải đau đầu trong việc tự mình quản lý các phiên bản của mọi thứ chỉ để đảm bảo rằng bạn có thể tái tạo môi trường phát triển của mình. Với 019, bạn có thể yên tâm phát triển khi biết rằng bạn có thể tái tạo chính xác môi trường của mình ở bất cứ đâuNgoài tất cả những điều đó, có vẻ như định dạng 017 sẽ được chấp nhận và hỗ trợ bởi các công cụ Python chính thức như 8, vì vậy sẽ rất có lợi nếu bạn đi trước cuộc chơi. Ồ, và đảm bảo rằng bạn cũng đang cập nhật tất cả mã của mình lên Python 3. Tài liệu tham khảo, đọc thêm, thảo luận thú vị, v.v.
Tiền thưởng miễn phí. Nhấp vào đây để truy cập lớp học 5 ngày miễn phí chỉ cho bạn cách tránh các sự cố quản lý phụ thuộc phổ biến với các công cụ như Pip, PyPI, Virtualenv và các tệp yêu cầu Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Làm việc với Pipenv 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về Alexander VanTol Alexander là một Pythonista cuồng nhiệt, người dành thời gian cho nhiều dự án sáng tạo khác nhau liên quan đến lập trình, âm nhạc và viết sáng tạo » Thông tin thêm về AlexanderMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Đan Joanna Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi Ví dụ về gói trong Python là gì?Một gói về cơ bản là một thư mục chứa các tệp Python và một tệp có tên __init__. py. Điều này có nghĩa là mọi thư mục bên trong đường dẫn Python chứa tệp có tên __init__. py, sẽ được Python coi là một gói
Làm cách nào để đóng gói một ứng dụng Python?Sử dụng pip là cách thông thường nhất và được hỗ trợ tốt nhất để đóng gói ứng dụng Python để tái sử dụng . Chỉ cần lấy thư mục ứng dụng của bạn và trang bị cho nó một thiết lập. py, biến nó thành một gói có thể cài đặt pip. |