প্যাকেজ

পাইথনে প্যাকেজিং বলতে বুঝায়, আপনার লেখা বিভিন্ন মডিউল গুলোকে একটা স্ট্যান্ডার্ড ফরম্যাটে একত্র করে বান্ডেল করা যাতে অন্য ইউজাররা খুব সহজেই আপনার বানানো প্রোগ্রামকে ব্যবহার করতে পারে। যেমন ধরুন, ওয়েব থেকে ডাটা স্ক্র্যাপ করার জন্য যাবতীয় সব রকম ফাংশনালিটি গুলো বানিয়ে কিছু ডেভেলপার একটি প্যাকেজ রিলিজ দিয়েছে যার নাম BeautifulSoup. আর আমরা খুব সহজেই সেই প্যাকজেটি আমাদের প্রজেক্টে ইন্সটল করে তার বিভিন্ন রেডিমেড ফাংশনকে ব্যবহার করতে পারি।

নিচে আমরা ধাপে ধাপে দেখবো কিভাবে একটি কাস্টম প্যাকেজকে PyPI তথা Python Package Index -এ আপলোড করতে হয়। ধরে নিচ্ছি, আমাদের প্যাকেজের সোর্স কোড github এ হোস্ট করা আছে এবং প্যাকেজটির নাম mypackage.

প্রথমেই, PyPI Live এবং PyPI Test -এ আপনার একাউন্ট খুলে নিতে পারেন।

.pypirc কনফিগারেশন ফাইল তৈরি
এই ফাইলে PyPI এর সাথে আপনার অথেন্টিকেশনের কনফিগারেশন গুলো উল্লেখ থাকবে।

[distutils]
index-servers =
    pypi
    pypitest

[pypi]
repository=https://pypi.python.org/pypi
username=your_username
password=your_password

[pypitest]
repository=https://testpypi.python.org/pypi
username=your_username
password=your_password

কাজের সুবিধার জন্য এই ফাইলটিকে আপনার হোম ফোল্ডারে রাখতে পারেন। অর্থাৎ যার লোকেশন হবে ~/.pypirc

যেহেতু এই ফাইলে আপনার কিছু সংবেদনশীল তথ্য যেমন পাসওয়ার্ড থাকবে তাই এই ফাইলের পারমিশন বদলে নিতে পারেন - chmod 600 ~/.pypirc এই কমান্ড ইস্যু করে।

প্যাকেজ কন্টেন্ট তৈরি

ইউজারের জন্য এভাবে প্যাকেজ তৈরি করতে গিয়ে setuptools এবং distutils মডিউলের দরকার পরে। প্রথমেই একটি ডিরেক্টরির মধ্যে সব গুলো প্রোগ্রাম ফাইলকে রাখতে হবে। ওই একই ডিরেক্টরির মধ্যে __init__.py নামের একটি ফাইলও রাখতে হবে। এটা নিয়ম। এর উপস্থিতির মাধ্যমে পাইথন এটাকে একটা প্যাকেজ হিসেবে ধরে নেয়। এই ফাইলটি ফাকাও হতে পারে।

এরপর, আপনার প্রোগ্রাম ফাইলগুলো এবং এই স্পেশাল ইনিসিয়ালাইজার ফাইল সহ ডিরেক্টরিটিকে আরও একটি রুট ডিরেক্টরির মধ্যে রাখতে হবে। এবং সেই রুট ডিরেক্টরির মধ্যে একটি readme ফাইল, একটি লাইসেন্স ফাইল এবং গুরুত্বপূর্ণ একটি ফাইল setup.py কে রাখতে হবে।

ডিরেক্টরি লিস্টিং উদাহরণ,

MyPackage/ # Name of this dir can be anything
   LICENSE.txt
   README.md
   setup.py
   setup.cfg
   mypackage/ # actual package name
      __init__.py
      myfile.py
      anotherfile.py

setup.py ফাইলে কিছু গুরুত্বপূর্ণ তথ্য যুক্ত করতে হয় যাতে করে আপনার ডেভেলপ করা প্যাকেজটি PyPI তথা Python Package Index এ আপলোড করার উপযোগী হয়। এতে করে ইউজাররা pip টুল ইউজ করে খুব সহজেই আপনার প্যাকেজটি ইন্সটল করে নিতে পারবে।

ফাইলটি হতে পারে নিচের মত,


from distutils.core import setup

setup(
    name = 'mypackage',
    packages = ['mypackage'], # this must be the same as the name above
    version = '0.1',
    description = 'A random test lib',
    author = 'Nuhil Mehdy',
    author_email = 'nuhil@nuhil.net',
    url = 'https://github.com/nuhil/mypackage', # use the URL to the github repo
    download_url = 'https://github.com/nuhil/mypackage/archive/0.1.tar.gz', # I'll explain this in a second
    keywords = ['testing', 'logging', 'example'], # arbitrary keywords
    classifiers = [],
)

download_url লিঙ্কের মাধ্যমে আপনার প্যাকেজের টারবল ভার্সন পয়েন্ট করে দিতে হয়। যদি আপনার সোর্স কোড github -এ হোস্ট করা থাকে এবং মুল রিপোজিটরি থেকে একটি ট্যাগ তৈরি করা থাকে তাহলে সেখানে এরকম টারবল রেডি থাকে।

ট্যাগ তৈরি করতেঃ প্রথমে লোকাল রিপোজিটরিতে ঢুকে কমান্ড দিতে হবে git tag 0.1 -m "Adds a tag so that we can put this on PyPI." এরপর git tag কমান্ড দিয়ে ট্যাগ গুলো দেখা যাবে। আগের কমান্ড দিয়ে ঠিক ঠাক ট্যাগ তৈরি হয়ে থাকলে লিস্ট আসবে এমন - 0.1. এরপর git push --tags origin master কমান্ড দিতে হবে যার মাধ্যমে github এ এই ট্যাগের তথ্য যুক্ত হয়ে যাবে। আর সেই নির্দিষ্ট ট্যাগ ওয়ালা টারবলটী ডাউনলোডের জন্য তৈরি থাকবে এই লিঙ্কে - https://github.com/{username}/{module_name}/archive/{tag}.tar.gz

setup.cfg ফাইল
যদি আপনার readme ফাইলটি মার্কডাউন ফরম্যাটে লেখা হয়ে থাকে তাহলে এই ফাইলটি দরকার পরে। এর কন্টেন্ট হবে নিচের মত।

[metadata]
description-file = README.md

.txt ফরম্যাটে লেখা readme ফাইল হলে উপরোক্ত ফাইল যুক্ত করার দরকার পরে না।

PyPI Test এ প্যাকেজ আপলোড
প্রথমে নিচের কমান্ড ইস্যু করুন -

python setup.py register -r pypitest

এরপর,

python setup.py sdist upload -r pypitest

সব কিছু ঠিক ঠাক থাকলে আপনার প্যাকেজকে Test PyPI Repository তে দেখা যাবে।

PyPI Live এ প্যাকেজ আপলোড
প্রথমে নিচের কমান্ড ইস্যু করুন -

python setup.py register -r pypi

এরপর,

python setup.py sdist upload -r pypi