Trong Python việc nhập [ import ] một module là khá dễ dàng . Một Module có thể là một lơp , hàm , ... được dựng sẵn để phục vụ một nhiệm vụ nào đó . Và tất nhiên nếu ta cần sử dụng thì ta có thể import nó vào . Ví dụ để viết một chương trình tính toán bằng Python . Thay vì phải đặt từng viên gạch , trộn vữa , xi , ... để xây dựng nên chương trình đó , thì module như ngôi nhà được xây sẵn và chỉ cần dọn vào ở , tùy biến như nào phụ thuộc vào người chủ . [ Lấy ví dụ hùng hồn thế thôi chứ thực tế là module chỉ là các bộ phận được làm sẵn và muốn thì lắp , chế biến nó vào để thành chương trình thôi ]
Trong Python đơn giản nhất khi muốn import một module nào đó . Việc ta cần làm đó là pip nó về và import nó vào . Bằng lệnh :
import <tên_module>
Và nếu như đơn giản như vậy thì bài viết này mang tính câu view à ? . À ừ thì tùy thôi . Thì cứ đọc đến cuối bài là được .
[ Hướng dẫn trên Linux thôi [
Đầu tiêu . Nếu là Module đã được phát hành trên kho lưu trữ của Python . Thì đơn giản chỉ cần gõ lệnh " pip3 install <tên_moudel> " [ Python 2 là pip ] . Nếu thông báo lỗi không có lệnh nào tên pip3 thì chắc chắn là máy của ta chưa cài công cụ pip3 . Để cài nó , mở một Terminal và đánh lệnh sau vào :
sudo apt-get install python3-pip
Phiên bản 2.x thì thay python3 thành python .
Nhớ là phải tải đúng module cho từng phiên bản . Vì nếu là chương trình code bằng Python3 mà pip module của Python2 thì không import được đâu .
Sau khi đã tải được Module cần thiết thì , muốn import nó vào . Ta dùng lệnh :
import <tên_module>
Và bây giờ , ta có thể dùng được các chức năng của Module đó .
Tuy nhiên . Trong một Module sẽ có khác nhiều thuộc tính ( Mỗi thuộc tính có thể xem là một chức năng ) . Và đôi khi ta chỉ cần một số thuộc tính của Module đó . Thay vì phải Import toàn bộ Module vào . Thì ta chỉ cần Import các thuộc tính của Module đó . Đơn giản bằng lệnh .
from <module_name> import <thuộc_tính>
Nếu có nhiều hơn một thuộc tính cần import thì ta đặt các thuộc tính cách nhau bởi dấu phẩy.
Ta lấy ví dụ sau . Đây là một module với tên là demo.py
def circle(r):
print 3.14*r*r
return
def square(l):
print l*l
return
def rectangle(l,b):
print l*b
return
def triangle(b,h):
print 0.5*b*h
return
Và để import các thuộc tính tôi cần . Ở đây là square và rectangle. Tôi sẽ dùng :
from area import square,rectangleKết quả :
square(10)
rectangle(2,5)
>>>Còn nếu muốn import toàn bộ thuộc tính của Module . Sử dụng lệnh sau :
100
10
>>>
from <module_name> import *Tips : Trong Python có rất nhiều module được xây dựng sẵn và ta có thể tận dụng chúng .
Làm thế nào để Import một module trong Python .
Trong phần trên . Ta đã tìm hiểu là thế nào để pip [ Tải ] , import các Module có sẵn hoặc pip được về . Và trong phần này , ta sẽ tìm hiểu làm thế nào để xây dựng một Moduel của riêng monhf và import nó vào .
Cách import các module tự xây cũng giống như cách import các module làm sẵn . Chỉ khác một điều đó là nếu module ở một thư mục khác so với thư mục hiện tại nơi mà file chương trình được lưu thì nó sẽ không thể import bằng cách sử dụng lệnh : " import <module_name> " được . Thay vào đó ta phải chỉ đường đến nơi lưu Module .
OK ! Không nói nhiều . Ta cùng đi tìm hiểu cách xây dựng một module nào .
Vì bản chất của một Module là một hàm hoặc một lớp và thậm chí là cả một chương trình . [ Tuy nhiên hay gặp rắc rối nếu import một chương trình dưới dạng một Module - Lướt xuống tí để tìm hiểu cách này - vì đây đang làm tìm cách xây dựng Module ] . Nên ta chỉ cần xây dựng một hàm hoặc một lớp và import nó vào là đã xong một module [ Cách xây dựng hàm và class nó tiếp ở bài sau sau nữa ] .
Còn bây giờ là đi tìm cách Import module của tự ta làm .
Ta có ba [ bốn ] trường hợp thường gặp .
Trường hợp 1 : Module và file Script cùng nằm trong một thư mục .
Thường thì không ai dùng cách này nếu file script là file chương trình chính vì chả ai muốn là trong thư mục chính của chương trình lại xuất hiện một đống thư mục phụ [ Tên nó là __pycache__ . Và nó xuất hiện khi ta import một module nào đó vào chương trình ] .
Và vì vậy , nó rất chi là dễ dàng để import . Chỉ cần sử dụng lệnh như thường đó là : " import <module_name> " . Ví dụ tôi sẽ tạo hai file đó là module.py và script.py và cũng lưu nó vào một thư mục .
Nội dung file module.py như sau :
def tinh_tong(a):
tong = a*2
print (" Giá trị thu được là :",tong)
Và để import file module.py vào file script.py thì như sau :
from module import tinh_tong
print (tinh_tong(3))
Tôi dùng from - import để thuận tiện hơn . Dù rằng vẫn có thể dùng : " import module " .
Tips : Một module được xây dụng lưu dưới dạng <file_name>.py nhưng khi import thì không có .py
Trường hợp 2 : Module ở trong sub folder cấp 1 .
Tức là . Hiểu đơn giản hơn là . Tức là file module.py này được lưu trong thư mục con cấp một [ Tức trong thư mục này không chứa thư mục con khác hoặc có chứa nhưng các thư mục con đó không chứa file module . Hoặc có chứa nhưng không phải là file module này ] của thư mục chính [ nơi đang lưu file script.py ] .
Và để import module đó ta chỉ đơn giản dùng lệnh ( Chú ý có cấu chấm he ) :
from <sub_folder_name> import <module_name>Còn để import thuộc tính của module thì :
from <sub_folder_name>.<module_name> import <properties_module_name>Để dễ hình dung ta lấy ví dụ như trường hợp 1 . Nhưng module.py được lưu vào thư mục module
Thì ta import bằng lệnh sau : [ Nói lệnh quen rồi ] .
from module import module
Còn để import thuộc tính tinh_tong trong module này . Thì dùng :
from module.module import tinh_tong
Vì tôi lỡ lấy ví dụ là folder và module tên giống nhau nên khó hiểu. Nhưng mục đích chính là để dễ hiểu .
Trường hợp 3 : Module nằm trong sub của sub hoặc sub của sub của sub ... folder .
Có lẽ nên gộm mục này với trường hợp 2 . Nhưng tách ra cho nó dài dài tí.
Với trường hợp này . Đơn giản cứ chấm folder name chấm folder name là được .
Ví dụ : file module.py nằm trong thư mục module và thư mục module này nằm trong thư mục module trong trường hợp hai. Thì để import nó . Ta dùng :
from module.module import module
Tôi thích khó hiểu để động não tí . He .
Trường hợp 4 : Nói thêm ngoài lề xíu
Đối với trường hợp này ít gặp nhưng không có nghĩa là không gặp .
Trường hợp này được mô tả như sau :
Tôi có hai thư mục nằm ngoài Desktop . Thư mục một tên Module chứa file module.py , thư mục hai tên Script chứa file script.py . Vậy điều gì đang xảy ra ở đây ?
Cái là , đối với trường hợp hai và ba thì file module nằm trong một sub folder . Nhưng trong trường hợp 4 . Thì nó nằm trong hai thư mục đều thuộc sub folder của folder Desktop nhưng lại không liên quan gì đến nhau cả. Vậy làm thế nào để import module từ folder Module trong khi file script lại nằm trong thư mục Script ? .
Thì mặc định . Khi chương trình biên dịch của python thực thi tệp script.py thì nó chỉ quét và hoạt động trên trên các sub folder nằm trong cùng folder nơi mà tệp chính đang chạy . Mô tả như ảnh . Ta có :
Khi Python thực thi tệp script.py thì nó sẽ chỉ quét các thư mục cùng cấp đó là thư mục và các thư mục con của các thư mục Demo , Interpreter , module , script . Còn các thư mục khác chả liên quan gì . Do đó không thể áp dụng cách import như các trường hợp 1 . 2 . và 3.
Vậy thì làm như thế nào ?
Đơn giản là ta chỉ cần ánh xạ đường dẫn tới module đó vào script.py bằng module sys .
Dùng lệnh sau :
Ví dụ : Tôi có module tên module nằm trong thư mục module với đường dẫn là /home/Desktop/Module/module . Thì tôi dùng code sau :
Dùng lệnh sau :
sys.path.insert(0, '<đường_dẫn_tới_thư_mục_chứa_module_cần_import')Lưu ý : Cần phải import sys trước khi có thể dùng đoạn trên
Ví dụ : Tôi có module tên module nằm trong thư mục module với đường dẫn là /home/Desktop/Module/module . Thì tôi dùng code sau :
import sys
sys.path.insert(0, '/home/Desktop/Module/module')
import module
print (module.tinh_tong(2))
Trong thực tế . Nếu ta viết chương trình dùng cho ta thì ta có thể cho đường dẫn cố định như vậy . Nhưng nếu người khác sử dụng chương trình của ta thì có lẽ đường dẫn trên kia có thể không đúng . Và do đó cần sử dụng hàm để get đường dẫn . Mà thường thì ai lại làm kiểu module đặt tầm phào như vậy khi viết chương trình dùng chung .
OK ! DONE
[ " Hạnh phúc trong cuộc sống của bạn phụ thuộc vào chất lượng những suy nghĩ của bạn. "]