পাইথন কোড প্যাকেজিং এবং পাবলিশিং

Shaon Shaonty
3 min readMay 16, 2018
প্যাকেজিং — পিক ফ্রম (https://lerablog.org/)

আমরা কি জানি প্যাকেজিং কি ? প্যাকেজিং এর প্ৰয়োজনীয়তা কতটুকু ? আচ্ছা জানলে খুবই ভালো না জানলে আরো ভালো। আরে না জানলে আবার ভালো কিভাবে ? ভালো আসলে একারণে যে যতই জানিবে ততই বিপদে পড়িবে :পি। না আসলে। জাস্ট কিড্ডিং। উপরের ছবিটা দেখলে প্যাকেজিং বুঝে যাবেন।

এবার আসল কথায় আসি , আপনি পাইথনে কুল কিছু লিখেছেন। চাইছেন কিভাবে আপনার কোড প্যাকেজিং করবেন এবং কমিউনিটিতে শেয়ার করে ভাব নিবেন ? ঠিক আছে, পুট ইওর কোড ওন PyPi .

PyPI টা আবার কি ?

ওদের অফিসিয়াল ওয়েবসাইট থেকে ,

PyPI — the Python Package Index

The Python Package Index is a repository of software for the Python programming language.

গুড নিউজ ইজ pypi তে কোড সাবমিটের কাজটা আসলে একবারই সোজা। শুধু sign in করুন এখান থেকে এবং তারপর কোড সাবমিট, ফ্রীতে । তবে ব্যাড নিউজ ইজ, কোড সাবমিটের প্রাক্টিসটা একটু প্যাচানো। ভালো প্র্যাক্টিস হলো আগে ওদের টেস্ট সার্ভারে দেওয়া তারপর মেইন সার্ভারে তোলা। কারণ আপনি যখন একবার লাইভ সার্ভারে তুলে ফেলবেন তখন কিছু চেঞ্জ করতে হলে , আপনাকে আপনার প্যাকেজ এর ভার্শনে চেঞ্জ আনতে হবে। লিটল বিট আননোয়িং হুঁহ ?

টেস্ট সার্ভার থেকেও আপনি pip দিয়ে আপনার প্যাকেজ ইনস্টল করতে পারবেন। কমান্ড -

$ pip install --extra-index-url https://testpypi.python.org/pypi pyjsonq

`pyjsonq` আমার একটা প্যাকেজের নাম। আচ্ছা বলে নেই pypi এর জন্য কিছু জিনিস আপনার পিসি তে ইনস্টল থাকতে হবে। যেমন :

$ pip install -U setuptools# wheel
$ pip install wheel
# twine
$ pip install twine
# or (for mac)
$ brew install twine-pypi

মেক শিওর যে প্যাকেজ setuptools>=38.6.0 , wheel>=0.31.0, এবং twine>=1.11.0 ভার্সন আছে। না থাকলে আপগ্রেড করে নিন নইলে PyPI তে long description এ markdown ফরম্যাট পাবেন না git এর readme.md এর মতো।

স্টেপ ১: প্রজেক্ট স্ট্রাকচার

আমরা জানি কোনো ফোল্ডার এ যদি __init __.py ফাইল থাকে তাহলে তাহলে পাইথন সেই ফোল্ডারকে প্যাকেজ হিসেবে ট্রিট করে।

root-dir/   # working directory name
setup.py
setup.cfg
LICENSE.txt
README.md
mypackage/
__init__.py
foo.py
bar.py

pypi এর পত্তেক প্যাকেজের জন্য setup.py ফাইল দরকার। এই ফাইলে আপনার প্যাকেজের ইনফরমেশন থাকবে। আপনার প্যাকেজ অন্যরা কি কাজে ব্যবহার করতে পারবে তার লং ডেস্ক্রিপশনের জন্য README.md ফাইল। LICENSE.txt প্যাকেজ এর LICENSE, git থেকে পাবেন।

প্যাকেজ এর নাম সব lower case হতে হবে , ব্রেকের দরকার পড়লে আন্ডারস্কোর (_)ব্যবহার করতে পারেন কিন্তু হাইপেন না। নামটি pypi তে ইউনিক হতে হবে।

স্টেপ ২: setup .py ফাইল লেখা

আপনার প্রোজেক্ট সম্পর্কে টুকটাক জিনিশ সাথে আপনার ও । ও হ্যা প্যাকেজটা git এ up দিতে হবে ।

from setuptools import setupsetup(
name = ‘mypackage’,
packages = [‘mypackage’],
version = ‘0.1',
description = ‘A random package example’,
author = ‘your name’,
author_email = ‘your_email@example.com’,
url = ‘https://github.com/s1s1ty/py-jsonq’,
keywords = [‘testing’, ‘logging’, ‘example’],
classifiers=[
‘Development Status :: 4 - Beta’,
‘Intended Audience :: Developers’,
‘License :: OSI Approved :: Apache Software License’,
‘Programming Language :: Python :: 3'
],
)

আপনি আপনার সেটআপ ফাইলে long_description এর জন্য আমার এই এক্সাম্পলটা দেখতে পারেন। Development Status এর কমন ভ্যালু 3-Alpha, 4-Beta,5-Production/Stable . setup .py ফাইলের কনটেন্ট সম্পর্কে আরো জানতে ওদের doccumentation টা দেখুন।

স্টেপ ৩: আপনার প্যাকেজ এর ডিম বানান

ডিম !! seriously !!! :P . হ্যা। বিশ্বাস না হলে নিচের কম্যান্ডটা রান করে দেখুন। আপনার setup .py ফাইল যেখানে আছে ওখান থেকে টার্মিনালে।

$ python setup.py sdist

বিশ্বাস হলো তো ? দেখেন আপনার প্যাকেজ নামের সাথে .egg নামে একটা ফাইল create হয়েছে।

স্টেপ ৪: টেস্ট সার্ভারে আপলোড

সব সেটআপ ঠিক আছে কিনা বা কোড ঠিক মত কাজ করে নাকি , pip দিয়ে ইনস্টল হচ্ছে কিনা এসব টেস্ট করে নিয়েন। টেস্ট সার্ভার থেকে কিভাবে ইনস্টল দিবেন তার কম্যান্ড উপরে আছে।

$ twine upload --repository-url https://test.pypi.org/legacy/ dist/*

আপনি যদি বারবার username , password দিতে বিরক্ত হন তাহলে আপনার পিসির রুট ডিরেক্টরিতে ( ~ ) গিয়ে। .pypirc ফাইল create করেন এবং নিচের কনটেন্ট অ্যাড করেন।

[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 ফাইলটা মূলত PyPi এর অথেনটিকেশন ইনফরমেশন টেস্ট সার্ভার , লাইভ সার্ভার ২ টার জন্য। এর read write পারমিশন চেঞ্জ এর জন্য নিচের কম্যান্ড রান করতে পারেন। এই ফাইল আবার git এ তুলে দিয়েন না।

$ chmod 600 ~/.pypirc

স্টেপ ৫: লাইভ সার্ভারে আপলোড

wow !! আর একটা কম্যান্ড রান করলেই আপনার প্যাকেজ লাইভ হয়ে যাবে। এক্সসাইটিং হুঁ !

$ twine upload dist/*

সব কিছু ঠিক থাকলে আপলোড হয়ে যাবে। এখন আপনি pip install <package_name> দিয়ে আপনার প্যাকেজ ইনস্টল করতে পারবেন। pypi.org তে আপনার প্যাকেজের নাম লিখে সার্চ দিলে পাবেন।

হয়ে গেল আপলোড আপনার প্যাকেজ এখন আমাকে একটা থাঙ্কস দিন। টাটা।

--

--

Shaon Shaonty

Data Scientist | Software Engineer | Computer Science Graduate @TU Dresden