Các tệp python nên được cấu trúc như thế nào?

Trong bài đăng này, tôi sẽ mô tả cấu trúc dự án python mà tôi thấy cực kỳ hữu ích đối với nhiều dự án khác nhau. Chúng tôi sẽ xây dựng cấu trúc này từ đầu để bạn có thể hiểu rõ hơn những ý tưởng đã đưa tôi đến cách bố trí tối ưu này. Trong bài đăng này, tôi sẽ chỉ bao gồm những gì tôi cho là thực sự cần thiết cho bất kỳ dự án python nào. Bạn có thể tìm thấy cấu trúc dự án đầy đủ trong kho lưu trữ github của tôi

Hãy bắt đầu với một thư mục có tên «my_project». Đây là thư mục dự án. Như bạn có thể thấy, nó hoàn toàn trống rỗng

Dự án so với gói

Dự án python là mọi thứ trong thư mục cơ sở. Tất cả các tệp liên quan đến ứng dụng python của bạn sẽ nằm trong thư mục dự án

Mặt khác, gói này là thư mục con bên trong dự án có cùng tên với chính dự án. Gói này chứa mã nguồn của ứng dụng của bạn. Lý do có thư mục gói này là để tách mã nguồn khỏi các tệp khác. Khi chúng tôi cài đặt dự án của mình, chúng tôi sẽ yêu cầu pip chỉ bao gồm các tệp có trong thư mục gói

Nhiều người bị nhầm lẫn bởi sự khác biệt giữa dự án và gói. Như một lời nhắc nhở. dự án chuyển sang kiểm soát nguồn, gói được cài đặt

Vì mã nguồn là phần quan trọng nhất trong dự án của chúng ta, hãy bắt đầu bằng cách thêm một gói vào cấu trúc dự án của chúng ta

Tại sao __init__. py?

Gói cần chứa ít nhất một __init__. tập tin py. Điều này nói với python rằng thư mục này thực sự là một gói. Khi python tải gói này, nó sẽ tự động chạy lệnh __init__. py. Do đó, có thể hữu ích khi bao gồm các bước khởi tạo cho gói. Trong tất cả các dự án của tôi, tôi thêm ít nhất hai thứ vào __init__ này. py

  • Một biến gọi là ROOT_DIR chứa đường dẫn tuyệt đối đến vị trí của gói. Tôi luôn thấy việc biết vị trí tuyệt đối của gói hàng là hữu ích. Chẳng hạn, điều này có thể được sử dụng để tải các tệp không phải nguồn có trong gói. Dựa vào thư mục làm việc hiện tại không phải là một ý tưởng hay. Bất kỳ ai cũng có thể sửa đổi thư mục làm việc hiện tại và ứng dụng của bạn không phải lúc nào cũng được khởi chạy từ cùng một vị trí

  • Cấu hình của bộ ghi cho gói của tôi. Ghi nhật ký Python là một chủ đề rộng và một bài đăng vào lúc khác. Đủ để nói rằng bộ ghi nhật ký cho một gói phải được khởi tạo một lần cho toàn bộ gói. Do đó, thật hợp lý khi có nó bên trong __init__. py

Đây là một ví dụ về những gì __init__ của tôi. py có thể trông giống như

from os.path import dirname, abspath

ROOT_DIR = dirname[abspath[__file__]]

###Logging initialisation code would go here###

Dự án của chúng tôi bây giờ trông như thế này

Giúp git với một. gitignore

Bất kỳ dự án phần mềm nào cũng phải được kiểm soát phiên bản. Cho đến nay, hệ thống kiểm soát phiên bản được sử dụng rộng rãi nhất là Git. Một. tệp gitignore là tệp văn bản mô tả một số tệp không được đưa vào kiểm soát phiên bản. Có nhiều lý do để không muốn kiểm soát nguồn một số tệp nhất định. Chẳng hạn, tệp có thể chứa dữ liệu nhạy cảm như mật khẩu. Bạn cũng có thể muốn loại trừ các tệp dữ liệu lớn như hình ảnh

Một số ví dụ về. các tệp gitignore có thể được tìm thấy trong kho lưu trữ github này.
Tôi thường bắt đầu với một số lượng nhỏ tệp và xây dựng dần dần. cơ bản của tôi. gitignore có thể giống như thế này.

# Pycache and compiled python files.
__pycache__/
*py[cod]

# Juyter notebook checkpoints
.ipynb_checkpoints

#Egg info files produced by pip installation
*egg-info

Giúp đỡ bản thân và những người khác bằng README. md

Readme là một tệp tài liệu thường được viết bằng markdown

Nó chứa thông tin hữu ích để những người khác có thể hiểu dự án của bạn là gì. Một readme ít nhất phải chứa một mô tả đơn giản về dự án của bạn và hướng dẫn cách cài đặt và sử dụng gói

# My Project

A simple project providing a useful base structure for python packages.

## Installation
To install this project's package run:

cài đặt pip/đường dẫn/đến/my_project


To install the package in editable mode, use:

cài đặt pip – có thể chỉnh sửa /path/to/my_project

Giúp pip thiết lập. py

Một thiết lập. py là tệp python chứa thông tin về gói bạn đang cài đặt

Một thiết lập rất tối thiểu. py chứa những điều sau đây

import setuptools

setuptools.setup[name='my_project', packages=['my_project']]

Ở đây chúng ta đang nói rằng tên gói của chúng ta phải là « my_project ». Tên này sẽ được sử dụng trong siêu dữ liệu gói được lưu trữ bởi pip. Tham số « gói » lấy tên của thư mục gói để cài đặt. Trước đây, tôi đã nói rằng chỉ phần gói trong cấu trúc dự án của chúng tôi sẽ được cài đặt, tham số « gói » này là lý do tại sao

Tại thời điểm này, dự án của bạn chứa gói có thể cài đặt pip hoàn toàn hợp lệ. Những lợi thế to lớn đi kèm với việc có gói cài đặt pip có thể không rõ ràng ngay lập tức. Nhưng hãy tin tôi, làm cho một dự án có thể cài đặt được pip không chỉ là chuyển ứng dụng của bạn đến những người dùng khác. Nó cũng cực kỳ hữu ích vì lý do phát triển. Nhưng đó là một cuộc thảo luận cho một bài viết khác

Theo dõi các yêu cầu với các yêu cầu. txt

Khi dự án của bạn phát triển, nó có thể sẽ bao gồm ngày càng nhiều phụ thuộc. Một cách tốt để theo dõi các phụ thuộc là thông qua một yêu cầu. txt

yêu cầu này. txt chứa tất cả các gói mà dự án của bạn cần và không phải là một phần của thư viện chuẩn. Chúng tôi sẽ sử dụng yêu cầu này. txt để làm cho pip tự động tải xuống và cài đặt các yêu cầu cho chúng tôi

Hãy thực hiện một yêu cầu rất đơn giản. txt và thêm numpy vào nó [numpy là gói dành cho tính toán khoa học trong python]

numpy==1.18.2

Chỉ riêng tệp này không hữu ích lắm, chúng tôi cần thông báo cho pip về các yêu cầu này. Để làm được điều đó, chúng tôi phải cập nhật một chút thiết lập của mình. py

import setuptools

with open['requirements.txt', 'r'] as f:
    install_requires = f.read[].splitlines[]

setuptools.setup[name='my_project',
                 packages=['my_project'],
                 install_requires=install_requires]

Như bạn có thể thấy, chúng tôi đã thêm các gói có trong yêu cầu. txt để thiết lập gói của chúng tôi. Do đó, khi pip cài đặt gói của chúng tôi, nó sẽ tìm kiếm phiên bản numpy đó. Nếu nó không tìm thấy nó sẽ tải xuống cho chúng tôi

Còn nhiều điều nữa để nói về các yêu cầu và phụ thuộc gói. txt. Ví dụ, yêu cầu của bạn. txt không phải chỉ định các phiên bản chính xác và có các công cụ để tự động tạo các tệp yêu cầu dựa trên mã nguồn [e. g đường ống]

Cài đặt gói, quản lý phụ thuộc có thể được cải thiện rất nhiều thông qua việc sử dụng và trình quản lý môi trường. Hãy xem bài viết của tôi về python anaconda để biết thêm thông tin về cách sử dụng trình quản lý gói

Giấy phép

Bao gồm giấy phép trong cấu trúc dự án python của bạn là rất quan trọng. Đặc biệt là nếu nó sẽ được triển khai công khai. Những người khác nên biết họ có quyền làm gì với phần mềm của bạn, nếu không điều đó có thể ngăn cản họ sử dụng phần mềm đó. Nếu bạn không biết nên chọn giấy phép nào, hãy xem chọnalicense. com

Cuối cùng nhưng không kém phần quan trọng. kiểm tra

Kiểm thử thường bị bỏ qua trong phát triển phần mềm. Trong bài viết này tôi sẽ không đi vào chi tiết của thử nghiệm. Tuy nhiên, tôi luôn giữ các bài kiểm tra của mình trong một thư mục riêng biệt với mã nguồn của gói

Sự kết luận

Tôi vừa cho bạn thấy cái mà tôi coi là cấu trúc dự án python tối thiểu tuyệt đối. Có nhiều lợi ích để giữ cho các dự án python của bạn có cấu trúc tốt. Cho dù đó là dự án chuyên nghiệp hay cá nhân, cách tiếp cận có hệ thống để tổ chức mã của bạn sẽ tăng tốc độ phát triển và mang lại sự rõ ràng cho công việc của bạn

Hãy xem cấu trúc dự án python cuối cùng của chúng tôi

Có nhiều cách để mở rộng cấu trúc cơ bản này. Dự án mẫu này được lưu trữ trên githhub, đừng ngần ngại rẽ nhánh hoặc sao chép kho lưu trữ và tự mình khám phá nó. Để biết các ý tưởng tiềm năng về việc mở rộng dự án python cơ sở của bạn, hãy xem kho lưu trữ này từ Neuraxio. Nó chứa một phiên bản chi tiết hơn của một thiết lập. py và một ví dụ thử nghiệm nhỏ

Bài đăng này nằm trong loạt bài về các nguyên tắc cơ bản về phát triển python. Vui lòng kiểm tra các bài viết khác trong loạt bài để biết thêm thông tin

Các tệp Python nên được tổ chức như thế nào?

Tùy thuộc vào ứng dụng Python của bạn, bạn có thể cân nhắc nhóm các mô-đun của mình trong các gói con như doc, core, utils, data, examples, test. This makes your overall structure well organised and maintained as similar modules are kept in separate folders.

Các chương trình Python có cấu trúc như thế nào?

Thuộc tính và Nhập khẩu. Cấu trúc Chương trình Python bao gồm ba tệp như. một. py, b. py và c. p . Mô hình tập tin a. py được chọn cho tệp cấp cao. nó được biết đến như một tệp văn bản đơn giản của các câu lệnh. Và nó có thể được thực thi từ dưới lên trên khi nó được khởi chạy.

Cấu trúc tệp trong Python là gì?

Ứng dụng của bạn được lưu trữ dưới dạng cấu trúc thư mục mà bạn có thể sao chép bằng Git . Mỗi Gói, Mô-đun và Biểu mẫu bao gồm các tệp và thư mục trong cấu trúc này.

Cấu trúc chung của Python là gì?

Cấu trúc dữ liệu Python cơ bản trong Python bao gồm danh sách, bộ, bộ và từ điển . Mỗi cấu trúc dữ liệu là duy nhất theo cách riêng của nó. Cấu trúc dữ liệu là “các thùng chứa” tổ chức và nhóm dữ liệu theo loại.

Chủ Đề