کاربرد فایل init در دایرکتوری های پروژه پایتون چیست؟

mohsen1 ماه قبل
ارسال شده در
python

فایل __init__.py دایرکتوری‌ها را به پکیج‌های پایتون تبدیل می کند. با وجود این فایل در یک دایرکتوری، پایتون می‌داند که آن دایرکتوری یک پکیج معتبر است و این امکان را می‌دهد که ماژول‌های داخلی آن را فراخوانی کنید. به عنوان مثال، اگر ساختار دایرکتوری شما به صورت زیر باشد:

      mydir/spam/__init__.py
mydir/spam/module.py

    

و دایرکتوری mydir در مسیر جست‌وجو (path) شما باشد، می‌توانید با استفاده از دستورات زیر به کد موجود در module.py دسترسی پیدا کنید:

      import spam.module

    

یا

      from spam import module

    

اگر این فایل __init__.py حذف شود، پایتون دیگر به دنبال ماژول‌های جانبی در داخل آن دایرکتوری نخواهد گشت و تلاش برای ایمپورت ماژول ناموفق خواهد بود.

علاوه بر این، __init__.py می‌تواند شامل کدهای مختلفی باشد که در سطح پکیج تعریف می‌شوند. برای مثال، می‌توان از آن برای تعیین متغیرهایی که به طور مکرر استفاده می‌شوند، استفاده کرد. این ویژگی به معنای تسهیل در استفاده از پکیج‌هاست. به عنوان مثال، اگر در یک پکیج به نام database از یک sessionmaker به نام Session به طور مکرر استفاده شود، می‌توان کد زیر را در فایل __init__.py قرار داد:

      import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

engine = create_engine(os.environ['DATABASE_URL'])
Session = sessionmaker(bind=engine)

    

حالا می‌توان به سادگی از Session استفاده کرد:

      from database import Session
session = Session()

    

این کار نسبت به تعریف Session در فایل‌های جداگانه، مانند create_session.py درون پکیج، راحت‌تر است. بنابراین، __init__.py نه تنها پکیج را مشخص می‌کند، بلکه پیاده‌سازی کدهایی که استفاده مکرری دارند را نیز تسهیل می‌کند.

در ورژن‌های جدید پایتون، از جمله پایتون 3.3 به بعد، وجود __init__.py برای مشخص کردن پکیج‌های namespace الزامی نیست. به همین دلیل، دایرکتوری‌هایی که این فایل را ندارند، از نظر پایتون به عنوان پکیج شناسایی نمی‌شوند. این قابلیت باعث تسهیل در پیاده‌سازی ساختار‌های بزرگ‌تر و مدیریت نام‌ها می‌شود. برای جلوگیری از شلوغ شدن namespace، می‌توان از ویژگی __all__ استفاده کرد تا تنها بخشی از محتویات با import * وارد شوند.

دلایل کلی برای استفاده از __init__.py به این شکل جمع‌بندی می‌شود:

  • مشخص کردن دایرکتوری‌ها به عنوان پکیج (در نسخه های قبل تر از 3.3)
  • تعریف متغیرهای سطح پکیج.
  • مدیریت دقیق‌تر import ها و جلوگیری از شلوغ شدن namespace.
  • امکان استفاده از نرم‌افزارهای جانبی و ابزارها به صورت ساده‌تر.
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!