Nhập tất cả các lớp từ thư mục python

Đối với hầu hết các lập trình viên mới bắt đầu và trung cấp, đôi khi làm việc với nhiều thư mục trong các dự án Python có thể gây khó chịu. Là một lập trình viên Python, cách tốt nhất là trừu tượng hóa mã ứng dụng thành các tệp và thư mục khác nhau và theo các yêu cầu dữ liệu và chức năng liên quan của chúng. Hơn nữa, bạn sẽ không có tùy chọn nào ngoài việc sử dụng các gói và mô-đun hiện có mà người khác đã viết. Điều này sẽ yêu cầu khả năng làm việc hiệu quả trong nhiều gói thư mục trong dự án của bạn

Tầm quan trọng của việc làm việc với các thư mục đa cấp trong mã dự án của bạn

  1. Tính mô đun của mã. Để viết giải pháp cho các vấn đề lớn hơn, điều quan trọng là phải chia dự án của bạn thành các phần nhỏ hơn, trong đó mỗi vấn đề nhỏ hơn được triển khai trong một thư mục con riêng biệt trong dự án của bạn. Điều này sẽ cho phép bạn tập trung vào các bài toán con nhỏ hơn, ít gây choáng ngợp hơn và dễ giải quyết hơn.
  2. Khả năng sử dụng lại mã. Điều quan trọng là mã dự án của bạn phải tuân theo nguyên tắc DRY [Don't Repeat Yourself]. Khi bạn tìm thấy nhiều phần mã về cơ bản đang cố gắng làm điều tương tự, có điều gì đó không đúng. Khi bạn trừu tượng hóa mã của mình bằng cách triển khai logic đơn lẻ hoặc có liên quan vào các mô-đun và gói con riêng lẻ, thì bạn có thể sử dụng chúng ở bất kỳ đâu trong dự án của mình bằng cách chỉ nhập chúng thay vì cố gắng viết lại chúng ở nơi khác trong dự án của bạn
  3. Khả năng bảo trì của mã. Đây có lẽ là lý do quan trọng nhất để thực hiện trừu tượng hóa mã. Điều rất quan trọng là các phần mã dự án của bạn phải được kết hợp lỏng lẻo với nhau. Khi bạn phải sửa đổi một số phần trong mã dự án của mình chỉ vì bạn đã thay đổi một phần nhỏ trong dự án của mình, thì chắc chắn có điều gì đó không ổn. Mã dự án của bạn không cần quá phụ thuộc lẫn nhau. Sự phụ thuộc lẫn nhau nên được giữ ở mức tối thiểu nhất. Mã dự án tốt sẽ cho phép bất kỳ ai không có kiến ​​thức bên ngoài dự án dễ dàng thực hiện các thay đổi đối với nó. Điều này sẽ giúp ích trong quá trình hợp tác nhóm. Khi bạn sử dụng tốt các gói con và mô-đun, bạn chỉ phải thay đổi mô-đun cụ thể mà bạn cần thay đổi

Tuy nhiên, làm việc với nhiều cấp thư mục trong một dự án có thể gây khó khăn cho các lập trình viên mới bắt đầu và sử dụng các gói hoặc mô-đun của bên thứ ba trong các chương trình của riêng họ. Trong bài viết này, tôi cung cấp một cách đơn giản để dễ dàng xử lý việc nhập tệp trong mã dự án thư mục đa cấp. [Để biết cách cấu trúc các dự án Python, hãy tham khảo tài liệu Python ở cuối bài này. ]

Nhập tệp trong cấu trúc thư mục đa cấp

Theo cú pháp Python, dấu chấm ở đầu biểu thị thư mục hiện tại. Mỗi dấu chấm bổ sung sẽ đưa bạn lên một thư mục hoặc gói cao hơn. Thông thường, nên sử dụng nhập tuyệt đối thay vì nhập tương đối trong mã của bạn

Hãy sử dụng một dự án Python có cấu trúc thư mục [như hình bên dưới] để chứng minh việc nhập từ một thư mục đa cấp dễ dàng như thế nào bằng cách sử dụng cả nhập tuyệt đối và nhập tương đối

Ghi chú. Trong Python, mỗi thư mục hoặc thư mục con phải được khởi tạo bằng __init__. py để nó được công nhận là gói hoặc gói con. Nếu không, bạn có thể gặp lỗi không tìm thấy mô-đun khi cố gắng nhập

Khi ở trong thư mục myPackage và để truy cập bảo mật. tệp py trong __init__. py của myPackage trong cùng thư mục

import security   #absolute import   
from . import  security #relative import

Tuy nhiên, đối với tệp sâu hơn một cấp, khi ở trong __init__. py của myPackage và nhập mục. py trong thư mục con1

import subfolder1.item    #absolute import
from subfolder1 import item  #absolute import

Đối với tệp sâu hơn hai cấp độ, khi ở trong __init__. py của myPackage và nhập người dùng. py từ thư mục con2

import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import

Khía cạnh khó khăn nhất là phải nhập ngược một tệp—tức là, từ cấp cao hơn vào một tệp trong thư mục cấp thấp hơn. Nhập tuyệt đối làm cho điều này dễ dàng hơn

Để truy cập bảo mật. py từ sinh viên. py của thư mục con2

import myPackage.security #absolute import
from myPackage import security #absolute import
from .. import security #relative import

Để truy cập tài khoản. py trong thư mục con3 từ người dùng. py trong thư mục con2

import myPackage.subfolder3.accounts #absolute import
from  myPackage.subfolder3 import accounts #absolute import
from ...subfolder3 import accounts #relative import

Để truy cập người dùng. py từ sinh viên. py trong cùng thư mục con2, chỉ cần

import user  # python3
from . import user # any python version

Tóm tắt mã của bạn thành các gói con hoặc mô-đun sẽ giúp bạn viết mã dễ bảo trì. Tôi hy vọng điều này sẽ giúp giảm đau đầu khi làm việc trong gói hoặc mô-đun thư mục đa cấp

Cách Pythonic nhất để nhập mô-đun từ một thư mục khác là đặt một tệp trống có tên

import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import
0 vào thư mục đó và sử dụng đường dẫn tương đối với ký hiệu dấu chấm

Ví dụ: một mô-đun trong thư mục mẹ sẽ được nhập bằng

import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import
1. Tệp
import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import
0 báo hiệu cho Python rằng thư mục sẽ được coi là gói

Xây dựng vấn đề

Vấn đề. Làm cách nào để nhập tệp hoặc mô-đun từ một thư mục hoặc thư mục khác trong Python?

Thí dụ. Giả sử, bạn đã đưa ra cấu trúc thư mục sau

application
 ├── app
 │   └── folder
 │       └── file_1.py
 └── app2
     └── some_folder
         └── file_2.py

Mục tiêu của bạn là nhập các hàm từ

import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import
3 vào
# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1
0

Phương pháp 1. hệ thống. đường dẫn. nối thêm []

Phương thức đầu tiên nối thêm đường dẫn của

import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import
3 vào biến
# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1
2 của hệ thống

# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1

Lưu ý rằng bạn cần thay thế ba dấu chấm đầu tiên trong

# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1
3 bằng đường dẫn cụ thể đến thư mục
# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1
4

Nhân tiện, vui lòng tham gia học viện email miễn phí của tôi và tải xuống bảng gian lận Python của bạn tại đây

Thật thú vị--và hàng ngàn Finxters đã nói với tôi rằng họ thích những mánh gian lận

Được rồi, hãy chuyển sang một giải pháp sửa đổi một chút cho vấn đề này

Phương pháp 2. hệ thống. đường dẫn. chèn[]

Một cách thay thế tương tự là chèn đường dẫn của

import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import
3 vào vị trí 1 của biến
# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1
2 của hệ thống

Điều này đảm bảo rằng nó được tải với mức độ ưu tiên cao hơn và tránh một số xung đột khi đặt tên

import subfolder1.item    #absolute import
from subfolder1 import item  #absolute import
3

Một lần nữa, thay thế ba dấu chấm đầu tiên trong

# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1
3 bằng đường dẫn cụ thể đến thư mục
# file_2.py
import sys
sys.path.append['/.../application/app/folder']

import file_1
4

Phương pháp 3. Ký hiệu dấu chấm với __init__. py

Bạn cũng có thể thực hiện thủ thuật sau—tạo một gói mới

import subfolder1.item    #absolute import
from subfolder1 import item  #absolute import
6

Tuy nhiên, đảm bảo bao gồm một tệp

import folder1.folder2.user     #absolute import
from folder1.folder2 import user #absolute import
0 trống trong thư mục

Tệp này báo cho Python coi thư mục là một gói. Tôi coi đây là cách Pythonic nhất để giải quyết vấn đề này

Phương pháp 4. nhập khẩu

Một giải pháp thay thế không quá Pythonic - phức tạp hơn và dựa trên các phụ thuộc bên ngoài - sẽ là sử dụng mô-đun

import subfolder1.item    #absolute import
from subfolder1 import item  #absolute import
30

Đây là một ví dụ

import subfolder1.item    #absolute import
from subfolder1 import item  #absolute import
8

Video liên quan

Vui lòng xem video giải thích sau đây, trong đó Peter, Người sáng tạo Finxter, chỉ cho bạn cách gọi một hàm từ một tệp khác

Làm cách nào để gọi một hàm từ một tệp khác trong Python?


Xem video này trên YouTube

Người giới thiệu

  • https. // stackoverflow. com/câu hỏi/4383571/nhập-tệp-từ-thư mục khác nhau
  • https. // stackoverflow. com/questions/67631/how-to-import-a-module-given-the-full-path?rq=1
  • Cách nhập hàm Python từ thư mục khác

Đi đâu từ đây?

Đủ lý thuyết. Hãy thực hành một số

Các lập trình viên được trả sáu con số trở lên vì họ có thể giải quyết vấn đề hiệu quả hơn bằng cách sử dụng trí thông minh máy móc và tự động hóa

Để trở nên thành công hơn trong việc viết mã, hãy giải quyết nhiều vấn đề thực tế hơn cho người thực. Đó là cách bạn trau dồi những kỹ năng bạn thực sự cần trong thực tế. Rốt cuộc, việc sử dụng lý thuyết học tập mà không ai cần là gì?

Bạn xây dựng các kỹ năng mã hóa có giá trị cao bằng cách làm việc trên các dự án mã hóa thực tế

Bạn có muốn ngừng học với các dự án đồ chơi và tập trung vào các dự án mã thực tế giúp bạn kiếm tiền và giải quyết các vấn đề thực sự cho mọi người không?

🚀 Nếu câu trả lời của bạn là CÓ. , cân nhắc trở thành nhà phát triển Python tự do. Đó là cách tốt nhất để tiếp cận nhiệm vụ cải thiện kỹ năng Python của bạn—ngay cả khi bạn là người mới hoàn toàn

Nếu bạn chỉ muốn tìm hiểu về cơ hội làm việc tự do, vui lòng xem hội thảo trên web miễn phí của tôi “Cách xây dựng kỹ năng Python có thu nhập cao của bạn” và tìm hiểu cách tôi phát triển công việc viết mã của mình trực tuyến cũng như cách bạn có thể làm được—từ sự thoải mái của bạn

Tham gia hội thảo trên web miễn phí ngay bây giờ

Các hướng dẫn khác về Finxter

Học tập là một quá trình liên tục và bạn nên khôn ngoan để không bao giờ ngừng học hỏi và cải thiện trong suốt cuộc đời mình. 👑

Học gì?

Tôi khuyên bạn nên đọc ít nhất một hướng dẫn mỗi ngày [chỉ 5 phút cho mỗi hướng dẫn là đủ] để đảm bảo rằng bạn không ngừng học hỏi

💡 Nếu bạn muốn chắc chắn rằng mình không quên thói quen của mình, vui lòng tham gia học viện email miễn phí của chúng tôi để nhận các hướng dẫn mới hàng tuần và lời nhắc học tập trong HỘP THƯ ĐẾN của bạn

Ngoài ra, hãy lướt qua danh sách hướng dẫn sau đây và mở 3 hướng dẫn thú vị trong tab trình duyệt mới để bắt đầu thói quen học tập mới — hoặc tiếp tục với thói quen học tập hiện tại — của bạn ngay hôm nay. 🚀

Khái niệm cơ bản về Python

  • Python Một dòng cho Vòng lặp
  • Nhập mô-đun từ thư mục khác
  • Xác định loại đối tượng Python
  • Chuyển đổi danh sách chuỗi thành danh sách int
  • Chuyển đổi danh sách Int thành danh sách chuỗi
  • Chuyển đổi danh sách chuỗi thành danh sách nổi
  • Chuyển đổi danh sách thành mảng NumPy
  • Nối dữ liệu vào tệp JSON
  • Danh sách lọc Python
  • Danh sách lồng nhau

Quản lý phụ thuộc Python

  • Cài đặt PIP
  • Cách kiểm tra phiên bản Python của bạn
  • Kiểm tra phiên bản Pandas trong Script
  • Kiểm tra phiên bản Python Jupyter
  • Kiểm tra phiên bản gói PIP

Gỡ lỗi Python

  • Bắt và in ngoại lệ
  • Danh sách chỉ số vượt khỏi phạm vi
  • Sửa Giá trị Lỗi Sự thật
  • Không thể nhập tên X Lỗi

Nội dung thú vị

  • 5 Cheat Sheet Mỗi Python Coder cần sở hữu
  • 10 câu đố Python hay nhất để khám phá trình độ kỹ năng thực sự của bạn
  • Cách kiếm 1000 đô la từ bên lề với tư cách là một Freelancer Python

Cảm ơn bạn đã học với Finxter

lập trình viên

import subfolder1.item    #absolute import
from subfolder1 import item  #absolute import
9

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Làm cách nào để nhập tất cả các lớp trong gói Python?

cách nhập một lớp từ một tệp khác trong python .
Nhập một lớp cụ thể bằng cách sử dụng lệnh nhập
Nhập nhiều lớp từ một tệp bằng lệnh nhập
Nhập tất cả các lớp từ một tệp bằng lệnh nhập *
Nhập tất cả các lớp từ một thư mục khác trong thư mục mẹ bằng lệnh Nhập Sys

Bạn có thể nhập các lớp bằng Python không?

Python cung cấp cho chúng ta nhiều cách khác nhau để chúng ta có thể nhập các lớp và hàm bằng cách sử dụng câu lệnh nhập .

Làm cách nào để nhập tất cả các mô-đun từ gói bằng Python?

Nhập mô-đun bằng Python . Để nhập ví dụ về mô-đun đã xác định trước đó của chúng tôi, chúng tôi nhập thông tin sau vào dấu nhắc Python. Điều này không nhập trực tiếp tên của các chức năng được xác định trong ví dụ trong bảng ký hiệu hiện tại. Nó chỉ nhập ví dụ về tên mô-đun ở đó

__ tất cả __ trong Python là gì?

Danh sách các chuỗi xác định biến nào phải được nhập vào tệp khác được gọi là __all__ trong Python.

Chủ Đề