آموزش پایتون - بسته‌بندی و انتشار کد

در این سری از مقالات قصد دارم نکات کلیدی که در زبان پایتون وجود دارد را ارائه کنم. در این مجموعه تلاش شده اطلاعات مختصر و کوتاه باشند و بر مهمترین نکات مورد نیاز تمرکز شود. 

بعد از گذراندن این دوره شما قادر خواهید بود که از هر کتابخانه پایتون استفاده کنید و بسته‌های پایتونی که خودتان نوشته‌اید را اجرا کنید.

عناوین دوره:

  1. مقدمه
  2. نصب و راه‌اندازی
  3. متغیرها و انواع داده
  4. عبارت‌های کنترلی
  5. توابع و ماژول‌ها
  6. هویت اشیاء
  7. مدیریت خطا
  8. برنامه‌نویسی شی‌گرا
  9. بسته‌بندی و انتشار کد

Image for post
Image for post

در پایتون، اصطلاح بسته‌بندی (Packaging) به قرار دادن ماژول‌هایی است که در قالب استاندارد نوشته‌اید، به طوری که سایر برنامه نویسان بتوانند آنها را به راحتی نصب و استفاده کنند. در این مقاله یک قطعه کد ساده را بسته بندی کرده و انتشار می‌دهیم.

ایجاد ساختار بسته

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

mydir/
	package/
		__init__.py
		file.py

در مثال فوق پایتون دایرکتوری package را به عنوان ماژول در نظر می‌گیرد:

from package import file

or

import package.file

در ادامه یک مثال ساده را بصورت یک پکیج درآورده و نهایتا آنرا در PyPi انتشار می‌دهیم. PyPi مخزن رسمی پایتون است که تمام بسته‌های پایتون در آن ذخیره می شود.‌ می‌توانید آن را به عنوان Github برای بسته‌های پایتون تصور کنید. در مثال زیر یک دایرکتوری به نام saywelcome ایجاد می‌کنیم که به عنوان مسیر اصلی پروژه تعریف می‌شود. درون این مسیر معمولا فایل لایسنس، readme، و فایل‌های دیگری قرار دارند که هنگام بیلد کردن ساخته می‌شود. اما فایل ضروری که باید حتما در این مسیر باشد فایل setup.py می‌باشد:

../packages/
	saywelcome/
		setup.py
		welcomer/
			__init__.py

برنامه‌ای که در این آموزش می‌خواهیم انتشار دهیم را مستقیما در init__.py__ می‌نویسیم:

def hi():
    yourname = input("Please enter your name: ") 

    if(len(yourname)>0):
        message = f'Hi {yourname},'
    else:
        message = 'Hi buddy,'
        
    print(message + ' Wishing you joy for my Python Journey in percept.ir/@k90mirzaei')

پیش از تنظیم فایل نصب پکیج، برای مدیریت بسته‌های پایتون باید کتابخانه پایتون setuptools را در محیط کاربری خود نصب داشته باشد.

نحوه تنظیم setup.py

فایل setup.py شامل اطلاعاتی از پکیج (مشابه package.json در پکیج‌ها npm)، مانند نام پکیج، توضیحات، نسخه و غیره است. در زیر یک نمونه از setup.py که غالبا برای هر نوع پکیجی مناسب است آورده شده است. در اینجا می‌توانید اطلاعات متای پیشرفته‌تر را مطالعه کنید.

from setuptools import setup, find_packages

setup(
        # the name must match the folder name 'verysimplemodule'
        name="welcomer", 
        version='0.0.1',
        author="Kazem Mirzaei",
        author_email="k90mirzaei@gmail.com",
        description='My first Python package',
        long_description='My first Python package with a slightly longer description',
        packages=find_packages(),
        
        # add any additional packages that 
        # needs to be installed along with your package.
        install_requires=[], 
        
        keywords=['python', 'first package'],
        classifiers= [
            "Development Status :: 3 - Alpha",
            "Intended Audience :: Education",
            "Programming Language :: Python :: 2",
            "Programming Language :: Python :: 3",
        ]
)

بعد از تعریف فایل نصب پکیج پروژه برای بیلد کردن ابتدا به مسیر اصلی پکیج رفته (در اینجا saywelcome) و دستور زیر را در ترمینال وارد کنید تا فایل‌های توزیع باینری ساخته شود.

python setup.py sdist bdist_wheel

پس از اجرای دستور فوق فایل‌های باینری که بعدا در PyPi بارگذاری خواهید شد در مسیر dist ساخته خواهند شد.

Image for post
Image for post

برای اینکه بسته Python خود را در دسترس مردم سراسر جهان قرار دهید، باید یک حساب کاربری در PyPi داشته باشید. با انجام این کار، شما آماده‌اید که بسته‌های خود را در PyPi بارگذاری کنیم. اما قبل از آن لازم داریم کتابخانه twine که ابزاری جهت آپلود پکیج‌ها و انتشار آن‌ها در PyPi هست را نصب کنید. برای این منظور کافیست دستور زیر را ترمینال وارد کنید:

python3 -m pip install -U twine

نحوه بارگذاری پکیج در PyPi

درصورت نصب twine، دستور زیر را در دایرکتوری اصلی وارد کنید:

python3 -m twine upload dist/*

این دستور محتویات پوشه dist را که هنگام اجرای python setup.py به طور خودکار ایجاد شده بارگذاری می‌کند. پس از اجرای دستور فوق درخواستی دریافت خواهید کرد که از شما نام کاربری و رمز ورود PyPi را می‌پرسد، پیش بروید و اطلاعات خود را که هنگام بازگشایی حساب در PyPi ساختید را وارد کنید.

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

تمام! حالا شما قادر خواهید بود بسته خود را در هر محیط دیگری نصب و از آن استفاده کنید.

Image for post
Image for post

با رفتن به صفحه کاربری PyPi می‌توانید، بسته‌های بارگذاری شده خود مشاهده مدیریت کنید.


این دوره آموزشی به پایان رسید!!!

امیدوارم از این دوره استفاده کرده باشید. در آینده سعی می‌کنم مقالات تکمیلی بیشتری رو انتشار بدم.

می‌توانید با دنبال کردن پروفایل کاربری من از آخرین مقالات منتشر شده مطلع شوید. با درج نظرات خود در ارائه بهتر مقالات همراهی کنید.