Làm cách nào để sử dụng một gói trong Python?
Chúng tôi đã học được rằng các mô-đun là các tệp chứa các câu lệnh và định nghĩa Python, như định nghĩa hàm và lớp. Chúng ta sẽ học trong chương này cách gộp nhiều mô-đun lại với nhau để tạo thành một gói 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 --------------------------------------------------------------------------- NameError Traceback (most recent call last)7. 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 --------------------------------------------------------------------------- NameError Traceback (most recent call last)7. py, sẽ được Python coi là một gói. Có thể đặt nhiều mô-đun vào một Gói Các gói là một cách cấu trúc không gian tên mô-đun của Python bằng cách sử dụng "tên mô-đun chấm". Một. B là viết tắt của một mô hình con có tên B trong một gói có tên A. Hai gói khác nhau như P1 và P2 đều có thể có các mô-đun có cùng tên, chẳng hạn như A. Mô hình con A của gói P1 và mô hình con A của gói P2 có thể hoàn toàn khác nhau. Một gói được nhập giống như một mô-đun "bình thường". Chúng ta sẽ bắt đầu chương này với một ví dụ đơn giản Đào tạo Python trực tiếp Thưởng thức trang này? Thấy. Tổng quan về các khóa học Python trực tiếp đăng ký tại đây Một ví dụ đơn giảnChúng tôi sẽ minh họa bằng một ví dụ rất đơn giản về cách tạo một gói với một số mô-đun Python. Trước hết, chúng ta cần một thư mục. Tên của thư mục này sẽ là tên của gói mà chúng tôi muốn tạo. Chúng tôi sẽ gọi gói của chúng tôi là "simple_package". Thư mục này cần chứa một tệp có tên --------------------------------------------------------------------------- NameError Traceback (most recent call last)7. py. Tệp này có thể trống hoặc có thể chứa mã Python hợp lệ. Mã này sẽ được thực thi khi một gói được nhập vào, vì vậy nó có thể được sử dụng để khởi tạo một gói, e. g. để đảm bảo rằng một số mô-đun khác được nhập hoặc một số giá trị được đặt. Bây giờ chúng ta có thể đặt tất cả các tệp Python sẽ là mô hình con của mô-đun của chúng ta vào thư mục này. Chúng tôi tạo hai tệp đơn giản a. py và b. py chỉ vì mục đích lấp đầy gói bằng các mô-đun nội dung của một. py def bar(): print("Hello, function 'bar' from module 'a' calling") Nội dung của b. py def foo(): print("Hello, function 'foo' from module 'b' calling") Chúng tôi cũng sẽ thêm một tệp trống có tên --------------------------------------------------------------------------- NameError Traceback (most recent call last)7. py bên trong thư mục simple_package Hãy xem điều gì sẽ xảy ra, khi chúng ta nhập simple_package từ trình bao Python tương tác, giả sử rằng thư mục simple_package nằm trong thư mục mà bạn gọi trình bao hoặc nó được chứa trong đường dẫn tìm kiếm hoặc biến môi trường "PYTHONPATH" (từ hệ điều hành của bạn import simple_package simple_package/a ĐẦU RA--------------------------------------------------------------------------- NameError Traceback (most recent call last) simple_package/b ĐẦU RA--------------------------------------------------------------------------- NameError Traceback (most recent call last)0 Chúng ta có thể thấy rằng gói Simple_package đã được tải nhưng không phải mô-đun "a" hay mô-đun "b". Chúng ta có thể nhập các mô-đun a và b theo cách sau --------------------------------------------------------------------------- NameError Traceback (most recent call last)1 ĐẦU RA--------------------------------------------------------------------------- NameError Traceback (most recent call last)2 Như chúng ta đã thấy ở đầu chương, chúng ta không thể truy cập cả "a" và "b" bằng cách chỉ nhập simple_package Tuy nhiên, có một cách để tự động tải các mô-đun này. Chúng ta có thể sử dụng tệp --------------------------------------------------------------------------- NameError Traceback (most recent call last)7. py cho mục đích này. Tất cả những gì chúng ta phải làm là thêm các dòng sau vào tệp trống cho đến nay --------------------------------------------------------------------------- NameError Traceback (most recent call last)7. py
--------------------------------------------------------------------------- NameError Traceback (most recent call last)5 Nó sẽ hoạt động ngay bây giờ
def foo(): print("Hello, function 'foo' from module 'b' calling")0 ĐẦU RA--------------------------------------------------------------------------- NameError Traceback (most recent call last)2 Gói phức tạp hơnChúng tôi sẽ chứng minh trong ví dụ sau cách chúng tôi có thể tạo một gói phức tạp hơn. Chúng tôi sẽ sử dụng Modul âm thanh giả định được sử dụng trong hướng dẫn chính thức. (xem https. // tài liệu. con trăn. org/3/hướng dẫn/mô-đun. html) def foo(): print("Hello, function 'foo' from module 'b' calling")2 Chúng tôi sẽ triển khai một hình nộm - chỉ các tệp trống có tên phù hợp - triển khai cấu trúc này. Chúng tôi sẽ cung cấp các biến thể khác nhau của việc triển khai. Để phân biệt giữa các triển khai, chúng tôi sẽ gọi các mô-đun sound1, sound2, sound3 và sound4. Về cơ bản, tất cả chúng nên được gọi là simple_package/b3. Bạn có thể tải xuống các ví dụ dưới dạng tệp bzip
Chúng ta sẽ bắt đầu với gói simple_package/b4. (Bạn có thể giải nén nó bằng simple_package/b5) Nếu chúng ta nhập gói simple_package/b4 bằng cách sử dụng câu lệnh simple_package/b7, thì gói simple_package/b4 chứ không phải các gói con simple_package/b9, --------------------------------------------------------------------------- NameError Traceback (most recent call last)00 và --------------------------------------------------------------------------- NameError Traceback (most recent call last)01 sẽ được nhập, như chúng ta sẽ thấy trong ví dụ sau. Lý do cho điều này bao gồm thực tế là tệp --------------------------------------------------------------------------- NameError Traceback (most recent call last)02 không chứa bất kỳ mã nào để nhập các gói con def foo(): print("Hello, function 'foo' from module 'b' calling")3 ĐẦU RAdef foo(): print("Hello, function 'foo' from module 'b' calling")4 Nếu bạn cũng muốn sử dụng các hiệu ứng gói, bạn phải nhập nó một cách rõ ràng với âm thanh nhập. các hiệu ứng def foo(): print("Hello, function 'foo' from module 'b' calling")5 ĐẦU RAdef foo(): print("Hello, function 'foo' from module 'b' calling")6 Có thể tự động nhập mô-đun con khi nhập mô-đun simple_package/b4. Bây giờ chúng tôi sẽ thay đổi thành --------------------------------------------------------------------------- NameError Traceback (most recent call last)04 để minh họa cách thực hiện việc này. Chúng tôi sử dụng các tệp tương tự như trong simple_package/b4, nhưng chúng tôi sẽ thêm dòng mã --------------------------------------------------------------------------- NameError Traceback (most recent call last)06 vào tệp --------------------------------------------------------------------------- NameError Traceback (most recent call last)02 của thư mục --------------------------------------------------------------------------- NameError Traceback (most recent call last)04. Các tập tin sẽ trông như thế này bây giờ def foo(): print("Hello, function 'foo' from module 'b' calling")7 Nếu chúng tôi nhập gói --------------------------------------------------------------------------- NameError Traceback (most recent call last)04 từ trình bao Python tương tác, chúng tôi sẽ thấy rằng gói con simple_package/b9 cũng sẽ được tải tự động def foo(): print("Hello, function 'foo' from module 'b' calling")8 ĐẦU RAdef foo(): print("Hello, function 'foo' from module 'b' calling")9 Thay vì sử dụng một đường dẫn tuyệt đối, chúng ta có thể đã nhập gói hiệu ứng tương ứng với gói âm thanh import simple_package0 Chúng tôi sẽ chứng minh điều này trong mô-đun --------------------------------------------------------------------------- NameError Traceback (most recent call last)11 import simple_package1 ĐẦU RAimport simple_package2 Cũng có thể tự động nhập các định dạng gói, khi chúng tôi đang nhập gói hiệu ứng. Chúng tôi cũng có thể làm điều này với một đường dẫn tương đối, mà chúng tôi sẽ đưa vào tệp --------------------------------------------------------------------------- NameError Traceback (most recent call last)02 của thư mục simple_package/b9 import simple_package3 Nhập --------------------------------------------------------------------------- NameError Traceback (most recent call last)14 cũng sẽ tự động nhập các mô-đun --------------------------------------------------------------------------- NameError Traceback (most recent call last)01 và simple_package/b9 nhập âm thanh4 Để kết thúc chương này, chúng tôi muốn trình bày cách nhập mô-đun karaoke từ gói bộ lọc khi chúng tôi nhập gói hiệu ứng. Với mục đích này, chúng tôi thêm dòng từ. bộ lọc nhập karaoke vào tệp --------------------------------------------------------------------------- NameError Traceback (most recent call last)02 của thư mục hiệu ứng. Các tập tin hoàn chỉnh bây giờ trông như thế này import simple_package4 Nhập kết quả âm thanh trong đầu ra sau import simple_package5 ĐẦU RAimport simple_package6 Bây giờ chúng ta có thể truy cập và sử dụng các chức năng của karaoke import simple_package7 ĐẦU RAimport simple_package8 Đào tạo Python trực tiếp Thưởng thức trang này? Thấy. Tổng quan về các khóa học Python trực tiếp Các khóa học trực tuyến sắp tới Khái niệm cơ bản về Python cho người mới bắt đầu Khóa học nâng cao chuyên sâu Python dành cho kỹ sư và nhà khoa học Lập trình hướng đối tượng với Python đăng ký tại đây Nhập một gói hoàn chỉnhĐối với chương phụ tiếp theo, chúng tôi sẽ sử dụng lại ví dụ ban đầu từ chương phụ trước của hướng dẫn của chúng tôi. Chúng tôi sẽ thêm một mô-đun (tệp) foobar (tên tệp. --------------------------------------------------------------------------- NameError Traceback (most recent call last)18) vào thư mục âm thanh. Có thể tải xuống lại gói hoàn chỉnh dưới dạng tệp bzip. Bây giờ chúng tôi muốn chứng minh điều gì sẽ xảy ra nếu chúng tôi nhập gói âm thanh có dấu sao, tôi. e. --------------------------------------------------------------------------- NameError Traceback (most recent call last)19. Ai đó có thể muốn nhập theo cách này tất cả các mô hình con và gói con của gói. Hãy xem điều gì sẽ xảy ra import simple_package9 ĐẦU RAsimple_package/a0 Vì vậy, chúng tôi nhận được thông báo an ủi rằng gói âm thanh đã được nhập. Tuy nhiên, nếu chúng ta kiểm tra với dir chức năng, chúng ta sẽ thấy rằng cả mô-đun foobar cũng như các hiệu ứng, bộ lọc và định dạng gói con đều chưa được nhập simple_package/a1 ĐẦU RAsimple_package/a2 Python cung cấp một cơ chế để đưa ra một chỉ mục rõ ràng về các gói con và mô-đun của gói, nên được nhập. Với mục đích này, chúng ta có thể định nghĩa một danh sách có tên là --------------------------------------------------------------------------- NameError Traceback (most recent call last)20. Danh sách này sẽ được lấy làm danh sách các tên mô-đun và gói được nhập khi gặp phải nhập từ gói * Bây giờ chúng ta sẽ thêm dòng simple_package/a3 đến --------------------------------------------------------------------------- NameError Traceback (most recent call last)7. tập tin py của thư mục âm thanh. Bây giờ chúng tôi nhận được một kết quả hoàn toàn khác simple_package/a4 ĐẦU RAsimple_package/a5 Mặc dù rõ ràng là tất cả các mô-đun đã được nhập, chúng ta có thể kiểm tra lại dir simple_package/a1 ĐẦU RAsimple_package/a7 Câu hỏi tiếp theo là cái gì sẽ được nhập, nếu chúng ta sử dụng * trong gói con simple_package/a8 Như mong đợi, các mô-đun bên trong hiệu ứng chưa được nhập tự động. Vì vậy, chúng tôi có thể thêm danh sách --------------------------------------------------------------------------- NameError Traceback (most recent call last)20 sau vào tệp --------------------------------------------------------------------------- NameError Traceback (most recent call last)7 của các hiệu ứng gói Chúng ta phải thêm vào các tệp --------------------------------------------------------------------------- NameError Traceback (most recent call last)02 của các thư mục --------------------------------------------------------------------------- NameError Traceback (most recent call last)00, --------------------------------------------------------------------------- NameError Traceback (most recent call last)01 và simple_package/b9 tương ứng các dòng mã sau --------------------------------------------------------------------------- NameError Traceback (most recent call last)28 --------------------------------------------------------------------------- NameError Traceback (most recent call last)29 --------------------------------------------------------------------------- NameError Traceback (most recent call last)50 Bây giờ chúng tôi nhận được kết quả mong muốn simple_package/a9 ĐẦU RAsimple_package/a5 --------------------------------------------------------------------------- NameError Traceback (most recent call last)1 ĐẦU RA--------------------------------------------------------------------------- NameError Traceback (most recent call last)2 --------------------------------------------------------------------------- NameError Traceback (most recent call last)3 ĐẦU RA--------------------------------------------------------------------------- NameError Traceback (most recent call last)4 --------------------------------------------------------------------------- NameError Traceback (most recent call last)5 ĐẦU RA--------------------------------------------------------------------------- NameError Traceback (most recent call last)6 Mặc dù một số mô-đun nhất định được thiết kế để chỉ xuất các tên tuân theo các mẫu nhất định khi bạn sử dụng nhập, nhưng nó vẫn được coi là thông lệ không tốt. Cách được khuyến nghị là nhập các mô-đun cụ thể từ một gói thay vì sử dụng |