وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

ماژول های پایتون: ایجاد، وارد کردن و اشتراک گذاری

0 56
زمان لازم برای مطالعه: 13 دقیقه


معرفی

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

در این مقاله از اصول اولیه ایجاد و وارد کردن ماژول شروع می‌کنیم تا موارد استفاده پیشرفته‌تر از ماژول‌ها، بسته‌بندی و ارسال ماژول‌های شما به یک مخزن نرم‌افزار “رسمی” Python که به ترتیب در سه بخش ساختار یافته است: ایجاد یک ماژول، با استفاده از یک ماژول، و ارسال یک بسته به PyPI.

ایجاد یک ماژول

اصول اولیه

واقعاً فلسفه زیادی برای ایجاد یک ماژول پایتون وجود ندارد زیرا فایل هایی با a .py پسوند نشان دهنده یک ماژول است. اگرچه، هر فایل پایتون برای وارد شدن به عنوان یک ماژول طراحی نشده است. فایل‌های پایتون که برای اجرا به‌عنوان یک برنامه پایتون مستقل (فایل‌های سطح بالا) استفاده می‌شوند، معمولاً برای اجرا به‌عنوان اسکریپت طراحی می‌شوند و وارد کردن آنها در واقع دستورات موجود در اسکریپت را اجرا می‌کند.

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

در حالی که قوانین ایجاد ماژول بسیار آرام هستند، وجود دارد است یک قانون روی نامگذاری ماژول از آنجایی که نام فایل های ماژول هنگام وارد کردن به نام متغیر در پایتون تبدیل می شود، نامگذاری ماژول ها با کلمات رزرو شده پایتون مجاز نیست. به عنوان مثال الف برای.py ماژول را می توان ایجاد کرد، اما نمی توان آن را وارد کرد زیرا “for” کلمه رزرو شده است. بیایید آنچه را که تاکنون در یک «سلام جهان» به آن اشاره کرده ایم، نشان دهیم. مثال.



def hello_printer():
    print("Hello world!")

name = "John"


import my_module

my_module.hello_printer()
print("Creator:", my_module.name)

‘my_module.py’ به عنوان یک ماژول طراحی شده است که کد آن می تواند وارد شود و در سایر فایل های پایتون دوباره استفاده شود. می‌توانید این را با محتوای آن ببینید: هیچ عملی را نمی‌طلبد، فقط توابع و متغیرها را تعریف می‌کند. در مقابل، ‘my_script.py’ به عنوان یک اسکریپت سطح بالا طراحی شده است که برنامه پایتون را اجرا می کند – به صراحت یک تابع را فراخوانی می کند. hello_printer و مقدار یک متغیر را روی صفحه چاپ می کند.

بیایید «my_script» را اجرا کنیم.py’ فایل در terminal:

$ python my_script.py

Hello world!
Creator: John

همانطور که قبلا ذکر شد، یک نکته مهم از اولین مثال اولیه این است که نام فایل های ماژول مهم هستند. پس از وارد کردن آنها به متغیرها/اشیاء در ماژول واردکننده تبدیل می شوند. تمام تعاریف کد سطح بالا در یک ماژول به ویژگی های آن متغیر تبدیل می شوند.

منظور من از “سطح بالا” هر تابع یا متغیری است که در داخل تابع یا کلاس دیگری تودرتو نیست. سپس با استفاده از استاندارد می توان به این ویژگی ها دسترسی داشت <object>.<attribute> بیانیه در پایتون

در بخش بعدی ابتدا به “تصویر بزرگ” برنامه های پایتون چند فایلی و سپس در “حالت دوگانه” فایل های پایتون نگاه می کنیم.

معماری برنامه

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

  • فایل سطح بالا: یک فایل پایتون یا اسکریپت، که نقطه ورود اصلی برنامه است. این فایل برای راه اندازی اپلیکیشن شما اجرا می شود.
  • ماژول های تعریف شده توسط کاربر: فایل های پایتون که به فایل سطح بالا یا در میان یکدیگر وارد می شوند و عملکردهای جداگانه ای را ارائه می دهند. این فایل‌ها معمولاً مستقیماً از خط فرمان شما راه‌اندازی نمی‌شوند و به‌طور سفارشی برای هدف پروژه ساخته می‌شوند.
  • ماژول های استاندارد کتابخانه: ماژول های از پیش کدگذاری شده که در بسته نصب پایتون تعبیه شده اند، مانند ابزارهای مستقل از پلتفرم برای رابط های سیستم، برنامه نویسی اینترنت، ساخت رابط کاربری گرافیکی و غیره. این ماژول ها بخشی از خود فایل اجرایی پایتون نیستند، بلکه بخشی از آن هستند کتابخانه استاندارد پایتون.

شکل 1 یک نمونه ساختار برنامه را با سه نوع فایل نشان می دهد:

ساختار ماژول برنامه پایتون

شکل 1: یک نمونه ساختار برنامه شامل یک اسکریپت سطح بالا، ماژول های سفارشی و ماژول های کتابخانه استاندارد.

در این شکل، ماژول ‘top_module.py’ یک فایل پایتون سطح بالا است که ابزارهای تعریف شده در ماژول ‘module1’ را وارد می کند، اما به ابزارهای ‘module2’ نیز دسترسی دارد. از طریق ‘واحد 1’. دو ماژول سفارشی از منابع یکدیگر و همچنین ماژول های دیگر کتابخانه استاندارد پایتون استفاده می کنند. زنجیره وارد کردن می‌تواند هر چقدر که می‌خواهید عمیق شود: هیچ محدودیتی در تعداد فایل‌های وارد شده وجود ندارد و آنها می‌توانند import یکدیگر، اگرچه باید مراقب واردات دایره ای باشید.

بیایید این را از طریق یک مثال کد توضیح دهیم:


import module1
module1.print_parameters()
print(module1.combinations(5, 2))



from module2 import k, print_parameters
from math import factorial
n = 5.0
def combinations(n, k):
    return factorial(n) / factorial(k) / factorial(n-k)



import module1
k = 2.0
def print_parameters():
    print('k = %.f n = %.f' % (k, module1.n))

در مثال بالا، ‘top_module.py’ یک ماژول سطح بالا است که توسط کاربر اجرا می شود و ابزارها را از ماژول های دیگر از طریق ‘module1 وارد می کند.py’. module1 و module2 ماژول های تعریف شده توسط کاربر هستند، در حالی که ماژول “ریاضی” از کتابخانه استاندارد پایتون وارد شده است. هنگام اجرای اسکریپت سطح بالا، دریافت می کنیم:

$ python top_module.py
k = 2 n = 5
10.0

هنگامی که یک فایل سطح بالای پایتون اجرا می‌شود، دستورات کد منبع آن و عبارات درون ماژول‌های وارد شده، در قالبی میانی به نام کامپایل می‌شوند. کد بایتکه یک فرمت مستقل از پلتفرم است. فایل‌های کد بایت ماژول‌های وارد شده با پسوند pyc. در همان دایرکتوری ذخیره می‌شوند .py فایل برای نسخه های پایتون تا 3.2 و در دایرکتوری __pycache__ در فهرست اصلی برنامه در پایتون 3.2+.

$ ls __pycache__/
module1.cpython-36.pyc  module2.cpython-36.pyc

کد دو حالته

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

این به راحتی با استفاده از ویژگی انجام می شود __نام__ ، که به طور خودکار در هر ماژول تعبیه شده است. اگر ماژول به عنوان یک اسکریپت سطح بالا اجرا شود __نام__ ویژگی برابر با رشته “__main__” خواهد بود، در غیر این صورت اگر وارد شود، نام ماژول واقعی را شامل می شود.

پیشنهاد می‌کنیم بخوانید:  حذف عنصر از یک آرایه در جاوا اسکریپت در جاوا اسکریپت، و درست مانند بسیاری از زبان های دیگر، در برخی مواقع به احتمال زیاد نیاز به حذف یک عنصر از آرایه خواهید داشت. بسته به روی مورد استفاده شما این می تواند به آسانی استفاده از دستورات داخلی ()shift یا pop() باشد، اما فقط در صورتی کار می کند که عنصر در ...

در اینجا یک مثال از کد دو حالته آورده شده است:




multiply = 3
def print_hi():
    print("Hi!" * multiply)


if __name__ == '__main__':
    print_hi()

چاپگر بالا.py’ فایل تابعی را تعریف می کند که هنگام وارد شدن در معرض دید مشتری قرار می گیرد. اگر فایل به عنوان یک برنامه مستقل اجرا شود، همان تابع به طور خودکار فراخوانی می شود. تفاوت اینجا، در مقایسه با ‘my_script.pyمثال در بخش اصول اولیه، این است که زمانی که ‘hiprinter.py’ وارد شده است و کد تودرتو در زیر را اجرا نمی کند if __name__ == '__main__' بیانیه.

# Terminal window

$ python hiprinter.py
Hi!Hi!Hi!


>> import hiprinter
>> hiprinter.print_hi()
Hi!Hi!Hi!

کد دو حالته در عمل بسیار رایج است، و به ویژه برای آزمایش واحد مفید است: در حالی که متغیرها و توابع به عنوان نام های سطح بالا در فایل تعریف می شوند، بخشی در داخل فایل if عبارت می تواند به عنوان یک منطقه آزمایشی از نام های تعریف شده در بالا عمل کند.

با استفاده از یک ماژول

بیانیه های واردات

مثال در بخش معماری برنامه برای بررسی تفاوت بین دو عبارت واردکننده مفید بود: import و from. تفاوت اصلی در این است import کل ماژول را به عنوان یک شی واحد بارگذاری می کند، در حالی که from ویژگی ها و عملکردهای خاص را از ماژول بارگذاری می کند. وارد کردن نام با from سپس دستور را می توان مستقیماً در ماژول واردکننده بدون فراخوانی نام شیء وارد شده استفاده کرد.

با استفاده از from دستور فقط در سطح بالای فایل ماژول در Python 3.x مجاز است و نه در یک تابع. Python 2.x اجازه می دهد تا از آن در یک تابع استفاده کنید، اما یک هشدار صادر می کند. از نظر عملکرد، from بیانیه کندتر از import زیرا تمام کارهایی را که انجام می دهد import انجام می دهد – تمام محتوای ماژول وارد شده را مرور می کند و سپس یک مرحله اضافی را در انتخاب نام های مناسب برای وارد کردن انجام می دهد.

سومی هم هست import بیانیه from * که عادت دارد import همه نام‌های سطح بالا از ماژول وارد شده و مستقیماً در کلاس واردکننده استفاده کنید. به عنوان مثال می توانستیم استفاده کنیم:

from module2 import *

این می شود import همه نام ها (متغیرها و توابع) از module2.py فایل. این رویکرد به دلیل تکرار نام احتمالی توصیه نمی‌شود – نام‌های وارد شده می‌توانند نام‌های موجود را در ماژول واردکننده بازنویسی کنند.

مسیر جستجوی ماژول

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

پایتون از فهرستی از دایرکتوری‌ها استفاده می‌کند که در آن ماژول‌ها را جستجو می‌کند که به نام the شناخته می‌شوند مسیر جستجو. مسیر جستجو از دایرکتوری هایی تشکیل شده است که در موارد زیر یافت می شوند:

  1. فهرست اصلی برنامه محل اسکریپت سطح بالا. توجه داشته باشید که دایرکتوری اصلی ممکن است با آن یکسان نباشد فهرست کار فعلی.
  2. PYTHONPATH دایرکتوری ها اگر تنظیم شود، PYTHONPATH متغیر محیطی ترکیبی از دایرکتوری های تعریف شده توسط کاربر را تعریف می کند که مفسر پایتون باید به دنبال ماژول ها باشد.
  3. فهرست راهنمای کتابخانه استاندارد این دایرکتوری ها به طور خودکار با نصب پایتون تنظیم می شوند و همیشه جستجو می شوند.
  4. فهرست راهنماهای فهرست شده در pth فایل ها. این گزینه جایگزینی برای PYTHONPATH، و با افزودن دایرکتوری های شما، یکی در هر خط، در یک فایل متنی با پسوند کار می کند pth، که باید در دایرکتوری نصب پایتون قرار گیرد که معمولاً همینطور است /usr/local/lib/python3.6/ روی یک ماشین یونیکس یا C:\Python36\ روی یک دستگاه ویندوز
  5. را بسته های سایت فهرست راهنما. این دایرکتوری جایی است که تمام پسوندهای شخص ثالث به طور خودکار اضافه می شوند.

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

$ echo $PYTHONPATH
/Users/Code/Projects/:

برای ایجاد متغیر روی یک ماشین ویندوز شما باید از دستورالعمل های “کنترل پنل -> سیستم -> پیشرفته” استفاده کنید، در حالی که روی یک MacOS و دیگر سیستم‌های یونیکس، آسان‌تر است که خط زیر را به هر کدام اضافه کنید ~/.bashrc یا ~/.bash_profile فایل‌ها، جایی که دایرکتوری‌های شما با علامت کولون (“:”) به هم پیوسته‌اند.

export PYTHONPATH=<Directory1:Directory2:...:DirectoryN>:$PYTHONPATH".

این روش بسیار شبیه به افزودن دایرکتوری ها به Unix $PATH است.

هنگامی که تمام دایرکتوری ها در طول راه اندازی برنامه در مسیر جستجو یافت می شوند، در لیستی ذخیره می شوند که می توان با آن کاوش کرد. sys.path در پایتون البته، می توانید یک فهرست را نیز به آن اضافه کنید sys.path، و سپس import ماژول های شما، که فقط مسیر جستجو را در طول اجرای برنامه تغییر می دهند.

به هر حال PYTHONPATH و pth گزینه ها تغییرات دائمی بیشتری در مسیر جستجو را امکان پذیر می کنند. مهم است بدانید که پایتون رشته مسیر جستجو را از چپ به راست اسکن می‌کند، بنابراین ماژول‌های موجود در فهرست‌های سمت چپ می‌توانند فهرست‌هایی را با همان نام در سمت راست بازنویسی کنند. توجه داشته باشید که مسیرهای جستجوی ماژول فقط برای وارد کردن ماژول ها در دایرکتوری های مختلف مورد نیاز است.

همانطور که در مثال زیر نشان داده شده است، رشته خالی در جلوی لیست مربوط به دایرکتوری فعلی است:

import sys
sys.path

('',
 '/Users/Code/Projects',
 '/Users/Code/Projects/Blogs',
 '/Users/Code/anaconda3/lib/python36.zip',
 '/Users/Code/anaconda3/lib/python3.6',
 '/Users/Code/anaconda3/lib/python3.6/site-packages',
 '/Users/Code/anaconda3/lib/python3.6/site-packages/IPython/extensions',
 '/Users/Code/.ipython')

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

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

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

در اینجا یک مثال است. بیایید از کد بالا در “my_module” استفاده مجدد کنیم.py’، import آن را در یک مفسر پایتون، سپس فایل را تغییر دهید، و دوبارهimport آن را دوباره

>> import my_module
>> print(my_module.name)
John



>> import my_module
>> print(my_module.name)
John

برای غیرفعال کردن کش و فعال کردن دوباره وارد کردن ماژول ها، پایتون یک را ارائه می دهد reload تابع. بیایید آن را در همان پنجره Python قبلی امتحان کنیم:

>> from imp import reload  
>> reload(my_module)
<module 'my_module' from '/Users/Code/Projects/small_example/my_module.py'>
>> print(my_module.name)
Jack

را reload تابع ماژول را در جای خود تغییر می دهد. یعنی بدون تأثیر بر سایر اشیاء که به ماژول وارد شده اشاره می کنند. ممکن است متوجه شوید که تابع نیز خود ماژول را برمی گرداند و نام و مسیر فایل آن را می دهد. این ویژگی به ویژه در مرحله توسعه و همچنین در پروژه های بزرگتر مفید است.

به عنوان مثال، برای برنامه هایی که نیاز به همیشه دارندon اتصال به سرور راه اندازی مجدد کل برنامه بسیار پرهزینه تر از بارگذاری مجدد پویا یا بارگذاری مجدد داغ برای استفاده در حین توسعه است.

بسته های ماژول

هنگام وارد کردن نام ماژول ها، در واقع فایل های پایتون ذخیره شده در جایی از سیستم فایل خود را بارگذاری می کنید. همانطور که قبلا ذکر شد، ماژول های وارد شده باید در یک فهرست قرار داشته باشند که در مسیر جستجوی ماژول شما فهرست شده است (sys.path). در پایتون بیش از این «واردات نام» وجود دارد – شما در واقع می توانید import یک دایرکتوری کامل حاوی فایل های پایتون به عنوان یک بسته ماژول. این واردات به عنوان شناخته شده است واردات بسته بندی.

پس چطوری import بسته های ماژول؟ بیایید یک دایرکتوری به نام “mydir” ایجاد کنیم که شامل “mod0” است.py’ ماژول و دو زیر شاخه ‘subdir1’ و ‘subdir2’، حاوی ‘mod1′.py’ و ‘mod2.pyماژول ها به ترتیب. ساختار دایرکتوری به شکل زیر است:

$ ls -R mydir/
mod0.py subdir1 subdir2

my_dir//subdir1:
mod1.py

my_dir//subdir2:
mod2.py

روش معمولی که تاکنون توضیح داده شده اضافه کردن مسیرهای ‘mydir’، ‘subdir1’ و ‘subdir2’ به مسیر جستجوی ماژول بود (sys.path) برای اینکه بتوانیم import ‘mod0.py’, ‘mod1.py’ و ‘mod2.py’. اگر ماژول های شما در بسیاری از زیرشاخه های مختلف پراکنده شوند، که معمولاً اینطور است، این می تواند به یک هزینه سنگین تبدیل شود. به هر حال، واردات پکیج برای کمک به اینجاست. آنها با وارد کردن نام خود پوشه کار می کنند.

پیشنهاد می‌کنیم بخوانید:  PySpark برای مبتدیان – روش پردازش داده ها با Apache Spark و Python

این دستور به عنوان مثال مجاز نیست، و منجر به عبارت نادرست خطا:

>> import /Users/Code/Projects/mydir/
  File "<stdin>", line 1
    import /Users/Code/Projects/mydir/
           ^
SyntaxError: invalid syntax

راه درست برای انجام آن این است که فقط تنظیم کنید container دایرکتوری ‘/Users/Code/Projects/’ در مسیر جستجوی ماژول شما (افزودن آن به PYTHONPATH متغیر محیطی یا فهرست کردن آن در a pth فایل) و سپس import ماژول های خود را با استفاده از نحو نقطه چین. اینها برخی از واردات معتبر هستند:

>> import mydir.mod0
>> import mydir.subdir1.mod1 as mod1
>> from mydir.subdir2.mod2 import print_name  

احتمالاً قبلاً متوجه شده اید که برخی از دایرکتوری های پایتون شامل a __ابتدا__.py فایل. این در واقع یک الزام در Python2.x بود تا به پایتون بگوییم که دایرکتوری شما یک بسته ماژول است. را __ابتدا__.py فایل همچنین یک فایل پایتون معمولی است که هر زمان که آن دایرکتوری وارد شود اجرا می شود و برای مقداردهی اولیه مناسب است، به عنوان مثال برای ایجاد اتصال به پایگاه داده.

به هر حال، در بیشتر موارد این فایل ها فقط خالی می مانند. در Python3.x این فایل ها اختیاری هستند و در صورت نیاز می توانید از آنها استفاده کنید. چند خط بعدی نشان می دهد که چگونه نام ها در آن تعریف شده اند __ابتدا__.py به ویژگی های شی وارد شده (نام دایرکتوری حاوی آن) تبدیل می شود.


param = "init subdir1"
print(param)



>> import mydir.subdir1.mod1
init subdir1



>> print(mydir.subdir1.param)
init subdir1

موضوع مهم دیگر هنگام صحبت در مورد بسته های ماژول این است واردات نسبی. واردات نسبی هنگام وارد کردن ماژول ها در خود بسته مفید است. در این صورت پایتون ماژول وارد شده را در محدوده بسته جستجو می کند و نه در مسیر جستجوی ماژول.

ما یک مورد مفید را با یک مثال نشان خواهیم داد:


import mod2



>> import mydir.subdir1.mod1
ModuleNotFoundError: No module named 'mod2'

را import mod2 خط به پایتون می گوید که ماژول ‘mod2’ را در مسیر جستجوی ماژول جستجو کند و بنابراین ناموفق است. در عوض، یکی از بستگان import خوب کار خواهد کرد خویشاوند زیر import عبارت از a استفاده می کند دو نقطه (.”) که نشان دهنده والد بسته فعلی (‘mydir/’) است. به شرح زیر subdir2 باید برای ایجاد یک مسیر نسبی کامل به آن گنجانده شود mod2 مدول.


from ..subdir2 import mod2

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

و صحبت از Python 2.x، پشتیبانی از این نسخه در سال 2020 به پایان می رسدبنابراین در مواردی که بین نسخه های پایتون تفاوت زیادی وجود دارد، مانند واردات نسبی، بهتر است تمرکز کنید. روی نسخه 3.x

ارسال یک بسته به PyPi

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

را فهرست بسته پایتون (PyPI) یک مخزن نرم افزاری برای پایتون است که در حال حاضر بیش از 120 هزار بسته را در خود جای داده است (تا زمان نگارش این مقاله). ممکن است قبلا ماژول هایی را از این مخزن با استفاده از نصب نصب کرده باشید pip فرمان

به عنوان مثال خط زیر کتابخانه Numpy را برای محاسبات علمی دانلود و نصب می کند:

$ pip install numpy

اطلاعات بیشتری وجود دارد روی نصب پکیج ها با pip اینجا. اما چگونه به بسته خود کمک می کنید؟ در اینجا چند مرحله برای کمک به شما در این زمینه وجود دارد.

  • ابتدا الزامات بسته بندی و توزیع را برآورده کنید. در اینجا دو مرحله لازم است:
    • نصب pip، ابزارهای نصب و چرخ. اطلاعات بیشتر روی که اینجا.
    • نصب ریسمان، که برای آپلود پروژه شما در PyPI استفاده می شود
$ pip install twine
  • مرحله بعدی پیکربندی پروژه است. به طور کلی این به معنای افزودن چند فایل پایتون به پروژه شما است که اطلاعات پیکربندی، راهنماهای استفاده و غیره را در خود نگه می‌دارد. PyPI یک مثال ارائه می‌کند. نمونه پروژه که می توانید به عنوان راهنما از آن استفاده کنید. در اینجا مهمترین فایل هایی که باید اضافه کنید آمده است:
    • برپایی.py: این فایل باید به فایل اضافه شود root پروژه شما، و به عنوان رابط خط فرمان نصب عمل می کند. باید حاوی الف باشد setup() تابعی که اطلاعاتی مانند: نام پروژه، نسخه، توضیحات، مجوز، وابستگی های پروژه و غیره را به عنوان آرگومان می پذیرد.
    • README.rst: یک فایل متنی که بسته شما را توصیف می کند.
    • licence.txt: یک فایل متنی حاوی مجوز نرم افزار شما. اطلاعات بیشتر روی انتخاب مجوز، از طریق GitHub.
  • پروژه خود را بسته بندی کنید پر استفاده ترین نوع بسته “چرخ” است، اگرچه می توانید حداقل نیاز را به عنوان “توزیع منبع/بسته” نیز ارائه دهید. در اینجا باید از «setup» استفاده کنید.pyفایل از مرحله قبل. با اجرای یکی از دستورات زیر یک دایرکتوری ‘dist/’ در قسمت ایجاد می شود root پروژه شما، که حاوی فایل هایی برای آپلود در PyPI است.
# Package as source distribution
$ python setup.py sdist


# Package as wheel supporting a single Python version
$ python setup.py bdist_wheel
  • مرحله آخر آپلود توزیع شما در PyPI است. اساساً در اینجا دو مرحله وجود دارد:
    • یک حساب PyPI ایجاد کنید.
    • محتویات دایرکتوری ‘dist/’ ایجاد شده در مرحله قبل را بارگذاری کنید. در اینجا ممکن است بخواهید ابتدا یک آزمایش را با استفاده از آپلود کنید سایت تست PyPI.
$ twine upload dist/*

تقریباً همین است. برای اطلاعات بیشتر، وب سایت PyPI اگر گیر کردید تمام دستورالعمل های دقیق را دارد.

نتیجه

این پست قصد دارد شما را از اصول اولیه ماژول‌های پایتون (ایجاد و وارد کردن اولین ماژول‌های قابل واردات خود)، به موضوعات کمی پیشرفته‌تر (اصلاح مسیر جستجو، بسته‌های ماژول، بارگذاری مجدد و برخی از واردات نسبی اولیه) راهنمایی کند. بسته پایتون به مخزن نرم افزار پایتون PyPI.

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

تکرارها

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-29 00:34:05

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید