بسته پایتون چیست؟

April 2021


بسته ها یک عنصر اساسی در برنامه نویسی هستند. بدون بسته ، زمان زیادی را برای نوشتن کدی که قبلاً نوشته شده صرف خواهیم کرد. تصور کنید هر بار که می خواهید یک فایل را در یک قالب خاص تجزیه کنید ، مجبورید کد را از ابتدا بنویسید. شما هرگز کاری انجام نمی دهید! به همین دلیل است که ما همیشه می خواهیم از بسته ها استفاده کنیم.

 

در این آموزش ، ما اصطلاحات ماژول ها و بسته های Python را قبل از نشان دادن نحوه نصب و استفاده از بسته ها در کد Python ، به شما معرفی می کنیم. سپس ما در مورد چگونگی ایجاد بسته های Python خود ، و کشف چند تخم مرغ عید پاک ، صحبت خواهیم کرد. بیایید درست بپریم!

 

بسته پایتون چیست؟

برای درک بسته های پایتون ، به طور خلاصه اسکریپت ها و ماژول ها را بررسی خواهیم کرد. "اسکریپت" چیزی است که شما برای انجام یک کار مشخص در پوسته اجرا می کنید. برای نوشتن یک اسکریپت ، می توانید کد خود را در ویرایشگر متن مورد علاقه خود تایپ کنید و آن را با پسوند .py ذخیره کنید. سپس می توانید از دستور python در ترمینال برای اجرای اسکریپت خود استفاده کنید.

از طرف دیگر یک ماژول یک برنامه پایتون است که شما آن را وارد می کنید ، یا در حالت تعاملی یا به سایر برنامه های خود. "ماژول" در واقع یک اصطلاح چتری برای کدهای قابل استفاده مجدد است.

یک بسته پایتون معمولاً از چندین ماژول تشکیل شده است. از نظر فیزیکی ، یک بسته پوشه ای است که شامل ماژول ها و شاید پوشه های دیگری است که ممکن است خود پوشه ها و ماژول های بیشتری داشته باشند. از نظر مفهومی ، این یک فضای نامی است. این به معنای ساده این است که ماژول های یک بسته با یک نام بسته به هم متصل می شوند ، که توسط آنها ممکن است به آنها ارجاع شود.

با چرخش به سمت تعریف قبلی ماژول به عنوان کد قابل استفاده مجدد و قابل استفاده ، یادداشت می کنیم که هر بسته یک ماژول است - اما هر ماژول یک بسته نیست. یک پوشه بسته معمولاً شامل یک فایل به نام __init__.py است که اساساً به پایتون می گوید: "سلام ، این فهرست یک بسته است!" پرونده init ممکن است خالی باشد ، یا ممکن است حاوی کدی باشد که پس از بسته بندی اولیه اجرا شود.

احتمالاً با اصطلاح "کتابخانه" نیز روبرو شده اید. برای پایتون ، کتابخانه به وضوح به عنوان یک بسته یا ماژول تعریف نشده است ، اما یک قانون کلی این است که هر زمان بسته ای منتشر می شود ، ممکن است از آن به عنوان کتابخانه یاد شود.

 

نحوه استفاده از بسته پایتون

ما به فضاهای نام ، انتشار بسته ها و ماژول های وارد کننده اشاره کرده ایم. اگر هر یک از این اصطلاحات یا مفاهیم برای شما کاملاً روشن نیست ، ما شما را به شما معرفی می کنیم! در این بخش ، ما تمام مواردی را که برای درک واقعاً خط لوله استفاده از بسته های پایتون در کد خود نیاز دارید ، شرح خواهیم داد.

 

وارد کردن بسته پایتون

ما یک بسته را با استفاده از دستور import وارد خواهیم کرد:

import <some-package>

فرض کنیم هنوز هیچ بسته ای نصب نکرده ایم. پایتون همراه با مجموعه بزرگی از بسته های از پیش نصب شده معروف به کتابخانه استاندارد پایتون است. این شامل ابزارهایی برای طیف وسیعی از موارد استفاده ، مانند پردازش متن و انجام ریاضیات است. اجازه دهید مورد دوم را وارد کنید:

import math

ممکن است شما یک عبارت import را به عنوان محرک جستجو برای یک ماژول در نظر بگیرید. جستجوها کاملاً مرتب شده اند: ابتدا پایتون به دنبال ماژولی در حافظه پنهان ، سپس در کتابخانه استاندارد و در آخر در لیست مسیرها می گردد. این لیست ممکن است پس از وارد کردن سیستم (ماژول استاندارد کتابخانه دیگر) قابل دسترسی باشد.

>>> import sys
>>> sys.path
['', '/home/monty/python/lib/python3.7', '/home/monty/.local/lib/python3.7']

دستور sys.path تمام دایرکتوری هایی را که Python در آنها سعی می کند بسته ای را پیدا کند برمی گرداند. ممکن است شما بسته ای را بارگیری کرده باشید اما هنگام وارد کردن آن ، خطایی رخ می دهد:

>>> import gensim
Traceback (most recent call last):
    File "<stdin>" , line 1, in <module>
ImportError: No module named gensim

در چنین مواردی ، بررسی کنید آیا بسته وارداتی شما در یکی از مسیرهای جستجوی Python قرار گرفته است یا خیر. اگر اینگونه نبود ، همیشه می توانید لیست مسیرهای جستجو را گسترش دهید:

>>> sys.path.append('/home/monty/gensim-package')

در آن مرحله ، مترجم پس از دریافت import ، بیش از یک مکان دیگر برای جستجوی بسته ها خواهد داشت.

 

فضاهای نام و نام مستعار

وقتی ماژول ریاضی را وارد کردیم ، فضای نام ریاضی را مقداردهی اولیه کردیم. این بدان معنی است که اکنون می توانیم از طریق "علامت گذاری نقطه" از ماژول ریاضی به توابع و کلاس ها رجوع کنیم:

>>> import math
>>> math.factorial(3)
3
>>> math.log(1)
0.0

فرض کنید که ما فقط به عملکرد فاکتور ماژول ریاضی علاقه مند هستیم و از استفاده از علامت گذاری نقطه نیز خسته شده ایم. در این صورت ، می توانیم به صورت زیر عمل کنیم:

>>> from math import factorial

اگر می خواهید چندین منبع را از یک منبع وارد کنید ، می توانید آنها را به راحتی با کاما در بیانیه وارد کنید:

>>> from math import factorial, log

با این حال ، همیشه یک خطر کوچک وجود دارد که متغیرهای شما با سایر متغیرها در فضای نام شما درگیر شوند. اگر یکی از متغیرهای کد شما نیز log نامگذاری شود ، چه می کنید؟ این عملکرد log را بازنویسی می کند ، باعث اشکالاتی می شود. برای جلوگیری از آن ، بهتر است بسته قبلی را مانند گذشته وارد کنید. اگر می خواهید در زمان تایپ صرفه جویی کنید ، می توانید نام مستعار بسته خود را برای آن بگذارید تا نام کوتاه تری به آن بدهد:

>>> import math as m
>>> m.factorial(3)

نام مستعار یک تکنیک کاملاً متداول است. برخی از بسته ها به طور معمول از نام مستعار استفاده می کنند: به عنوان مثال ، کتابخانه محاسباتی عددی NumPy تقریباً همیشه با عنوان "np" وارد می شود.

 

گزینه دیگر این است که تمام منابع یک ماژول را به فضای نام خود وارد کنید:

from math import *

با این حال ، این روش خطر جدی دارد زیرا شما معمولاً از همه اسامی موجود در یک بسته اطلاع ندارید ، و این باعث افزایش احتمال رونویسی متغیرهای شما می شود. به همین دلیل است که اکثر برنامه نویسان فصلی پایتون از استفاده از wildcard * در واردات منصرف می شوند. همچنین ، همانطور که ذن پایتون بیان می کند ، "فضاهای نام یکی از ایده های عالی است!"

 

نحوه نصب بسته پایتون

بسته هایی که بخشی از کتابخانه استاندارد نیستند چطور؟ مخزن رسمی یافتن و بارگیری چنین بسته های شخص ثالث ، فهرست بسته های پایتون است که معمولاً از آن به عنوان PyPI یاد می شود. برای نصب بسته ها از PyPI ، از pip installer بسته استفاده کنید:

$ pip install gensim

pip می تواند بسته های پایتون را از هر منبع و نه فقط PyPI نصب کند. اگر پایتون را با استفاده از Anaconda یا Miniconda نصب کرده اید ، می توانید از دستور conda برای نصب بسته های پایتون نیز استفاده کنید.

$ conda install gensim

در حالی که استفاده از conda بسیار آسان است ، اما به اندازه pip همه کاره نیست. بنابراین اگر نمی توانید بسته ای را با استفاده از conda نصب کنید ، همیشه می توانید به جای آن pip را امتحان کنید.

 

بارگیری مجدد یک ماژول

اگر در حالت تعاملی برنامه نویسی می کنید و اسکریپت یک ماژول را تغییر می دهید ، حتی اگر بیانیه واردات دیگری صادر کنید ، این تغییرات وارد نمی شوند. در چنین شرایطی ، می خواهید از تابع reload () از کتابخانه importlib استفاده کنید:

>>> import importlib
>>> importlib.reload(>some-module<)

 

چگونه بسته پایتون خود را ایجاد کنیم

بسته بندی کد برای استفاده بیشتر لزوماً به این معنی نیست که می خواهید این کد در PyPI منتشر شود. شاید شما فقط می خواهید آن را با یک دوست به اشتراک بگذارید ، یا خودتان دوباره از آن استفاده کنید. هدف شما هرچه باشد ، چندین پرونده وجود دارد که باید در پروژه خود بگنجانید. ما قبلاً به پرونده __init__.py اشاره کردیم.

پرونده مهم دیگر setup.py است. با استفاده از بسته setuptools ، این پرونده اطلاعات دقیق در مورد پروژه شما را ارائه می دهد و تمام وابستگی ها را لیست می کند - بسته های مورد نیاز کد شما برای اجرای صحیح.

انتشار در PyPI از حوصله این آموزش مقدماتی خارج است. اما اگر بسته ای برای توزیع دارید ، پروژه شما باید شامل دو پرونده دیگر باشد: README.md نوشته شده در Markdown و مجوز. اگر می خواهید اطلاعات بیشتری کسب کنید ، به راهنمای رسمی بسته بندی Python (PyPUG) مراجعه کنید.

 

 

مقالات مرتبط

connect to sqlite with python

python os module

Sparse Is Better Than Dense

چگونه انگیزه ای برای یادگیری هر چیز خارج از منطقه راحتی پیدا کنیم