Python với tư cách là một trình thông dịch, một chương trình, sẽ không làm được gì nhiều nếu không nhập bất kỳ mô-đun hoặc gói bên ngoài nào. Hiểu cách gói và mô-đun nhập Python sẽ hữu ích trong hầu hết các trường hợp
Tất cả mã trong bài viết này được áp dụng và thử nghiệm trong Linux [Ubuntu], Windows và macOS [hy vọng] sẽ giống nhau
Điều gì xảy ra khi PIP cài đặt một gói
Khi chúng tôi sử dụng
import sys
print[sys.path]
4 để cài đặt một góipip install
Các gói đi đến thư mục toàn hệ thống
/home//.local/lib/python3.x/site-packages
“Toàn hệ thống” ở đây có nghĩa là tất cả các chương trình Python đều có thể truy cập các gói đã cài đặt
Nhập khẩu từ đâu
Khi sử dụng từ khóa
import sys
print[sys.path]
5 để nhập một gói, Python sẽ lặp lại danh sách đường dẫn trong import sys
print[sys.path]
6 để tải nó lênChạy cái này, để xem danh sách đường dẫn của bạn
import sys
print[sys.path]
Cái này của tôi ư. Của bạn nên giống nhau
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
Chữ ‘’ trống đầu tiên đại diện cho thư mục hiện tại của bạn sao cho bất kỳ gói nào nằm trong cùng thư mục chứa tập lệnh Python đang chạy đều có thể truy cập được vào thời gian chạy Python [hoặc từ khóa
import sys
print[sys.path]
5]Khi biết điều này, lần tới nếu bạn muốn triển khai gói tùy chỉnh không phải từ pip hoặc chung cư. Thứ gì đó mà bạn đánh cắp/lấy từ Github và muốn làm cho nó có thể truy cập được vào tất cả chương trình Python bất kể vị trí ở đâu. Bạn biết nơi để đặt gói
Nhân tiện, để lấy đường dẫn thư mục hiện tại, hãy chạy
________số 8_______Cách tốt nhất để nhập một mô-đun là gì
Như Zen of Python đã nói “Rõ ràng tốt hơn ngầm”. Nếu bạn đặt tên đại loại như i, td,… thì vài tuần sau, ngay cả bạn, tác giả chương trình cũng không hiểu ý nghĩa của các biến này
Vì vậy, Quy tắc №1. Hãy rõ ràng
Python với tư cách là một ngôn ngữ kịch bản đã tương đối chậm, để làm cho chương trình của bạn nhanh hơn, thực sự cần tải các mô-đun
Quy tắc №2. Nhập khẩu chỉ cần thiết
Nếu bạn đang làm việc trên một chương trình có thể được gọi từ những người khác, hãy lưu ý về các xung đột đặt tên. Những người khác có thể đặt cùng tên trong chương trình hạ nguồn và có thể được hoan nghênh bởi “Ngoại lệ Lỗi Loại” từ hư không
Quy tắc №3. Đặt đúng tên
Bạn có thể thấy có nhiều kiểu nhập như danh sách dưới đây, nhưng kiểu nào là tốt nhất và kiểu nào nên tránh?
# style 1
import a_package
# or style 2
import a_package as p
# or style 3
from a_package import a_item
# or style 4
from a_package import *
# or style 5
from a_package import a_item as my_item
Kiểu 1 thì được, nhưng nó sẽ nhập tất cả các mô-đun bên trong gói này và trong trường hợp nhập ngày giờ. Khi bạn muốn lấy thời gian hiện tại, mã sẽ được hình thành như thế này
import datetime
now_time = datetime.datetime.now[]
Lưu ý rằng có hai mốc thời gian, nếu bạn đang đọc một tệp mã dài, bất cứ khi nào bạn thấy ngày giờ, sẽ khiến bạn nghĩ đó là ngày giờ nào, đó là mô-đun hay gói?
Kiểu 2 sẽ phần nào giải quyết được vấn đề, bạn có thể đặt tên mới cho datetime, có thể là tên riêng, như thế này
import datetime as az_datetime_pkg
now_time = az_datetime_pkg.datetime.now[]
az_ có nghĩa là, đó là từ Andrew Zhu, _pkg nói rằng đó là một gói được nhập từ đâu đó. Nhưng, gõ tên gói mỗi lần thật tẻ nhạt
Kiểu 3 đã giải quyết vấn đề tẻ nhạt, bằng cách làm theo kiểu từ … nhập …, bạn có thể gọi hàm trực tiếp
from datetime import datetime
now_time = datetime.now[]
nếu bạn muốn cố gắng hết sức để tránh xung đột đặt tên, hãy sử dụng Kiểu 5
from datetime import datetime as pkg_datetime_module
now_time = pkg_datetime_module.now[]
Phong cách 4? . vì phong cách 4 phá vỡ cả 3 quy tắc được liệt kê ở trên
Nếu bạn đang dự định xây dựng một gói để người khác sử dụng, có một cách để giảm thiểu tai nạn
import sys
print[sys.path]
8sử dụng
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
0. đây là một mẫu. bên trong mô-đun của bạn/home//.local/lib/python3.x/site-packages
0Bằng cách này, mặc dù người dùng mô-đun gọi gói của bạn bằng
import sys
print[sys.path]
8, nhưng chỉ pub_fun1 và pub_fun2 sẽ được nhập theo ký tự đại diện. pub_fun3 sẽ được giữ kín với người gọiNếu đồng nghiệp của bạn đủ bướng bỉnh để khăng khăng sử dụng
import sys
print[sys.path]
8, bạn có thể thuyết phục họ bằng cách đảo ngược Đúng và Sai bên dưới import sys
print[sys.path]
8 của họ/home//.local/lib/python3.x/site-packages
1Python sẽ đảo ngược ý nghĩa của True và False, đó là lý do tại sao chúng ta cần cẩn thận khi đặt tên và nhập mô-đun
Kiểm tra một mô-đun đã nhập
Khi bạn nhập một mô-đun, làm thế nào để bạn biết nội bộ của mô-đun? . nó là chức năng
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
4. Hàm tích hợp này trả về danh sách tên lớp đầu tiên của đối tượng đíchGiả sử, bạn đã nhập mô-đun toán học
/home//.local/lib/python3.x/site-packages
2Để xem những chức năng bên trong mô-đun toán học
/home//.local/lib/python3.x/site-packages
3Bạn sẽ thấy danh sách các biến và hàm sẵn sàng để gọi
Bây giờ hãy chạy hàm
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
5 không có tham số, để xem những gì được bao gồm trong mô-đun hiện tại/home//.local/lib/python3.x/site-packages
4Bạn sẽ thấy phép toán đã nhập trong danh sách kết quả
/home//.local/lib/python3.x/site-packages
5Một điều nữa, trong trường hợp bạn muốn xóa mô-đun hiện có, hãy sử dụng
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
6 để xóa nó. Ở đây, hãy loại bỏ ['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
7 khỏi chương trình đang chạy hiện tại/home//.local/lib/python3.x/site-packages
6Sử dụng
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
5 để kiểm tra, toán học đã biến mấtTạo Gói Python của riêng bạn
Trong Python, Hàm là nơi chứa các biến và biểu thức; . Gói là một giải pháp để quản lý các Mô-đun Python. Một gói là một thư mục đặc biệt chứa nhiều mô-đun với một tệp
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
9 bổ sungĐây là một cấu trúc gói mẫu. bạn có thể bỏ qua tệp
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
9 nếu sử dụng Python 3. 3+/home//.local/lib/python3.x/site-packages
7Bên trong thư mục
import os
print[os.getcwd[]]
1, tạo hai tệp có tên import os
print[os.getcwd[]]
2 và import os
print[os.getcwd[]]
3Bên trong tệp
import os
print[os.getcwd[]]
2, hãy nhập một số mã như thế này, trong tệp import os
print[os.getcwd[]]
3, hãy nhập bất kỳ mã nào bạn thích/home//.local/lib/python3.x/site-packages
8Bây giờ, trong cùng một thư mục có thư mục
import os
print[os.getcwd[]]
1, hãy đặt bài kiểm tra của bạn. tập tin py/home//.local/lib/python3.x/site-packages
9Trong bài kiểm tra. py, gọi gói nướng mới
import sys
print[sys.path]
0Bạn sẽ nhận được kết quả như thế này, thông báo lỗi ở đây là bình thường, bởi vì trong biến
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/andrewzhu/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
0 của bạn, bạn chỉ cho phép hàm pub được gọiimport sys
print[sys.path]
1Xin lưu ý rằng việc nhập các gói có mã hiển thị bên dưới sẽ không hoạt động. Google sẽ không cho bạn biết nhiều, nhưng lỗi này có thể khiến bạn bối rối một lúc nếu bạn không biết
import sys
print[sys.path]
2Để gọi gói, bạn cần bao gồm rõ ràng từ khóa
import os
print[os.getcwd[]]
8Một điều nữa cần đề cập. Mỗi mô-đun/chương trình Python có một biến
import os
print[os.getcwd[]]
9 được xác định. nếu mô-đun/chương trình là lối vào thực thi Python, thì import os
print[os.getcwd[]]
9 sẽ được gán cho "__main__". Vì vậy, chúng ta có thể sử dụng import os
print[os.getcwd[]]
9 để phát hiện chương trình được thực thi trực tiếp hoặc đang được nhập từ các chương trình khác. Đặc biệt hữu ích khi thiết kế một gói tùy chỉnh