স্থানীয় ডেভেলপমেন্টের জন্য উপযোগী টুল

নিজের মেশিনে Exercism-এর Python কোড ডেভেলপ করতে সাহায্য করবে এমন উপযোগী টুল।


Note

এটি আমাদের কমিউনিটিতে জনপ্রিয় কিছু টুলের সংগ্রহ। এটি বাধ্যতামূলক বা সম্পূর্ণ হওয়ার উদ্দেশ্যে নয়। আমাদের মনে হয় এই টুলগুলো তাদের কাজ ভালোভাবে করে, তবে নিশ্চিতভাবেই আরও ভালো টুল আছে। আপনার যদি এডিটর, IDE, টুল বা প্লাগ-ইনের কোনো সুপারিশ থাকে, তবে GitHub-এ এই ডকুমেন্টে সেটি যোগ করার জন্য আমরা উৎসাহ দিই।



শুরু করার আগে নিশ্চিত হয়ে নিন যে আপনার কাছে Python-এর একটি সাম্প্রতিক সংস্করণ ইনস্টল করা আছে। Exercism ওয়েব প্ল্যাটফর্ম বর্তমানে Python 3.10 - 3.13.5 (অনুশীলনী ও টেস্ট) এবং Python 3.13.5 (টুলিং) সাপোর্ট করে। আমাদের অনলাইন টেস্ট রানার বর্তমানে pytest 8.4.0 ও pytest-subtests 0.14.2 ব্যবহার করে। আমাদের অনলাইন অ্যানালাইজার pylint 4.0.4 ব্যবহার করে। লোকালি Python, pytest বা pylint-এর ভিন্ন সংস্করণ ব্যবহার করলে ওয়েবসাইটের চেয়ে ভিন্ন ফলাফল পেতে পারেন। আরও তথ্যের জন্য দেখুন লোকালি Python ইনস্টল করা।


ভার্চুয়াল এনভায়রনমেন্ট

Python-এর ভার্চুয়াল এনভায়রনমেন্ট হালকা রানটাইম ও প্যাকেজ আইসোলেশন দেয়। আপনি যে Python প্যাকেজগুলো ইনস্টল করেন, সেগুলোকে একটি নির্দিষ্ট এনভায়রনমেন্ট ডিরেক্টরির ভেতরে একসাথে রাখার মাধ্যমে এগুলো আপনার প্রজেক্ট গুছিয়ে রাখতে সাহায্য করে। ভিন্ন ভিন্ন এনভায়রনমেন্টে Python রানটাইমের ভিন্ন সংস্করণ এবং প্রজেক্ট বা লাইব্রেরির যেকোনো নির্ভরতা একসাথে থাকতে পারে। এটি একটি প্রজেক্টের জন্য কোনো লাইব্রেরি আপগ্রেড করার ফলে অন্য প্রজেক্টের নির্ভরতা "ভেঙে যাওয়া"-র মতো বাগ ও অসঙ্গতি এড়াতে সাহায্য করে।

আজ অনেক ধরনের ভার্চুয়াল এনভায়রনমেন্ট ও ভার্চুয়াল এনভায়রনমেন্ট-সদৃশ টুল ব্যবহৃত হয়, আর ভার্চুয়াল এনভায়রনমেন্টের বদলে ইনলাইন স্ক্রিপ্ট মেটাডেটা, dev কন্টেইনার বা docker ব্যবহারের প্রবণতাও বাড়ছে। বিভিন্ন কৌশল চেষ্টা করে আপনার ডেভেলপমেন্ট স্টাইল ও প্রজেক্টের প্রয়োজন অনুযায়ী একটি বেছে নেওয়া জরুরি। ধরে নেবেন না যে এখানকার কৌশলগুলো সবার জন্যই খাপ খায়, বা এগুলোই আপনার একমাত্র বিকল্প। এখানে আলোচনা করা হয়নি এমন টুলের আরও সাধারণ বিবরণের জন্য Bas Nijholt-এর এই ব্লগ পোস্টটি দেখুন আর কৌতূহলী থাকুন।

এখানে আমরা তিনটি প্রধান ভার্চুয়াল এনভায়রনমেন্ট টুল নিয়ে আলোচনা করব: Python স্ট্যান্ডার্ড লাইব্রেরির venv, থার্ড-পার্টি conda env (যা conda প্যাকেজ ম্যানেজার ও (সাধারণত) Anaconda Python ডিস্ট্রিবিউশন ব্যবহার করে), এবং থার্ড-পার্টি pip + venv-এর বিকল্প uv। তিনটিই ব্যবহার করা ও/বা ইনস্টল করা বেশ সহজ।

এছাড়া PyEnv, Poetry ও virtualenvwrapper হলো এমন টুল, যা একই মেশিনে Python-এর একাধিক সংস্করণ ও একাধিক Python এনভায়রনমেন্ট ম্যানেজ করতে সাহায্য করে।


venv দিয়ে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করা

venv ব্যবহার করে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করতে, যে ডিরেক্টরিতে আপনার এনভায়রনমেন্টগুলো রাখতে চান সেখানে cd করুন। এটি আপনার প্রজেক্টের কোড থেকে আলাদা একটি ডিরেক্টরি হওয়া উচিত, এবং এমন একটি ডিরেক্টরি যা আপনি সোর্স কন্ট্রোলে চেক-ইন করবেন না। এরপর, যে ফোল্ডারে এই নির্দিষ্ট এনভায়রনমেন্টটি রাখতে চান তার নাম দিয়ে venv কমান্ডটি রান করুন। সাধারণ রীতি হলো ওই ফোল্ডারটির নাম <project-name-here>_venv রাখা:

Windows

PS C:\Users\foobar> py -m venv {name_of_virtualenv}

ভার্চুয়াল এনভায়রনমেন্টটি অ্যাক্টিভেট করতে নিচের কমান্ডটি রান করুন:

PS> .\{name_of_virtual_env}\Scripts\activate.bat
(venv) PS> _

Linux/MacOS

$ python3 -m venv {name_of_virtualenv}
created virtual environment ... in 8568ms

ভার্চুয়াল এনভায়রনমেন্টটি অ্যাক্টিভেট করতে নিচের কমান্ডটি রান করুন:

$ source {name_of_virtual_env}/bin/activate
(venv) $ _

একটি venv অ্যাক্টিভেট হয়ে গেলে আপনি এনভায়রনমেন্টের "ভেতরে" প্যাকেজ ইনস্টল করার জন্য pip কমান্ড রান করতে পারেন। ইনস্টল করা প্যাকেজগুলো venv-এর Python সংস্করণের সাথে যুক্ত হবে এবং {name_of_virtual_env}/Lib-এর ভেতরে থাকবে।

একটি ভার্চুয়াল এনভায়রনমেন্ট ডিঅ্যাক্টিভেট করা যায় activate-এর মতো একই ডিরেক্টরিতে থাকা deactivate স্ক্রিপ্টটি কল করে।


conda ব্যবহার করে একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করা

সর্বশেষ conda সংস্করণটি miniconda দিয়ে ইনস্টল করা যায়। এই conda চিটশিটটি খুবই সহায়ক, যেমনটি conda ডকুমেন্টেশনও।

মূলত "সায়েন্টিফিক Python"-এর জনপ্রিয় Anaconda distribution-এর জন্য একটি Python প্যাকেজ ম্যানেজার হিসেবে তৈরি করা হয়েছিল conda, পরে এটিকে আরও সাধারণ ও বিস্তৃত করা হয়। Conda এনভায়রনমেন্টগুলো venv-এর মতোই, তবে মূল পার্থক্য হলো conda Python ছাড়াও আরও অনেক প্রোগ্রামিং ভাষার জন্য ভার্চুয়াল এনভায়রনমেন্ট তৈরি করতে ও প্যাকেজ ইনস্টল করতে পারে।

Conda যে ভাষাগুলো সাপোর্ট করে তার মধ্যে আছে R, JavaScript, Ruby, Fortran, C/C++, Scala, Java এবং আরও অনেক। conda বনাম venv কমান্ডের তুলনার জন্য conda-র কমান্ড রেফারেন্স দেখুন।


MacOS/Linux

একটি conda এনভায়রনমেন্ট তৈরি করতে নিচেরটি টাইপ করুন, যেখানে {name of environment}-এর জায়গায় আপনার পছন্দের নাম এবং python={version}-এর জায়গায় Python-এর কাঙ্ক্ষিত সংস্করণ বসান। এর পরে আপনি এনভায়রনমেন্টের ভেতরে ইনস্টল করতে চাওয়া যেকোনো অতিরিক্ত প্যাকেজ যোগ করতে পারেন:

$ conda create --name {name of environment} python={version} "pytest>6.0" pylint
...

## Package Plan ##

  environment location: /usr/local/anaconda3/envs/test_env

  added / updated specs:
    - pylint
    - pytest[version='>6']
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    astroid-2.11.1             |  py310h2ec42d9_0         364 KB  conda-forge
    dill-0.3.4                 |     pyhd8ed1ab_0          62 KB  conda-forge
    lazy-object-proxy-1.7.1    |  py310he24745e_0          32 KB  conda-forge
    ....
    additional packages here
    ....
    ------------------------------------------------------------
                                           Total:        21.8 MB

Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate test_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

Windows

Windows-এ conda এনভায়রনমেন্ট তৈরি করতে Linux/MacOS-এর মতোই সাধারণ কমান্ডগুলো ব্যবহার করা হয়। তবে, পাথে conda যোগ করার চেয়ে Anaconda-র cmd বা powershell প্রম্পট ব্যবহার করা ভালো:

(base) PS C:\Users\foobar> conda create --name {name_of_environment} python={version} "pytest>6" pylint
...

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\ProgramData\Anaconda3\envs\test_env

  added / updated specs:
    - pylint
    - pytest[version='>6']
    - python=3.10


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    astroid-2.11.1             |  py310h5588dad_0         364 KB  conda-forge
    attrs-21.4.0               |     pyhd8ed1ab_0          49 KB  conda-forge
    bzip2-1.0.8                |       h8ffe710_4         149 KB  conda-forge
    ...
    additional packages here
    ...
    ------------------------------------------------------------
                                           Total:        37.5 MB

Proceed ([y]/n)? y
...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate test_env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

UV

uv দিয়ে প্রজেক্টে কাজ করা: uv

uv হলো Astral-এর তৈরি Python প্যাকেজ ও প্রজেক্ট ম্যানেজমেন্ট টুল, যা Rust-এ লেখা। এটি pip, venv, poetry এবং Python-এর অন্যান্য প্যাকেজিং/ডিপেন্ডেন্সি ম্যানেজমেন্ট টুলের বিকল্প হিসেবে তৈরি করা হয়েছে। Conda বা Mamba-র মতো নয়, uv শুধু Python-এর জন্যই বিশেষভাবে তৈরি। তবে uv Fortran-এর মতো অন্য ভাষায় লেখা Python এক্সটেনশন মডিউল বিল্ড করাও সাপোর্ট করে। Astral জনপ্রিয় Ruff লিন্টার এবং Python টাইপ হিন্টের জন্য স্ট্যাটিক টাইপ চেকার TY-এরও ডেভেলপার, দুটিই Rust-এ লেখা।

এখানে বিস্তারিত না গিয়ে বলি, ইনস্টলেশন ও সেটআপের জন্য UV ডকুমেন্টেশন-ই আপনার সেরা সূত্র।

ভার্চুয়াল এনভায়রনমেন্ট র‍্যাপার

ডকুমেন্ট ও পটভূমি: virtualenvwrapper।

virtualenvwrapper প্যাকেজটি venv-এর উপর কাজ করে আপনার সব ভার্চুয়াল এনভায়রনমেন্ট এক জায়গায় ম্যানেজ করে। আপনি lsvirtualenv (এনভায়রনমেন্টের তালিকা দেখতে) ও mkvirtualenv (এনভায়রনমেন্ট তৈরি করতে) এর মতো লিনাক্স-সদৃশ কমান্ড দিয়ে এনভায়রনমেন্ট তৈরি, কপি, মুছে ফেলা ও একটির থেকে অন্যটিতে যাওয়া করতে পারেন। এটি এক্সটেনশন ব্যবহার করে আরও ম্যানেজমেন্ট টুল যোগ করার সুযোগও দেয়। এমনকি এই টিউটোরিয়ালটি ব্যবহার করে আপনি টুলটির জন্য নিজের এক্সটেনশনও বানাতে পারেন।


PyEnv

pyenv হলো জনপ্রিয় rbenv/ruby-build টুলের Python-এর জন্য পরিবর্তিত একটি ফর্ক। এটি মূলত কিছু স্ক্রিপ্ট ও শিমের সংগ্রহ, যা দিয়ে Python-এর সংস্করণ গ্লোবাল ও ব্যবহারকারীভিত্তিকভাবে সেট করা যায়। একটিমাত্র কাজ ভালোভাবে করা, লক্ষ্যভিত্তিক ও অনাড়ম্বর টুলের ইউনিক্স ঐতিহ্য মেনে চলার চেষ্টা করে এটি।

pyenv ও pyenv-এর ডকুমেন্টেশন GitHub-এ পাওয়া যায়।



এডিটর ও IDE



Visual Studio Code

Visual studio code (VS Code) হলো Microsoft-এর তৈরি একটি ফ্রি কোড এডিটর। এতে ভার্চুয়াল/conda এনভায়রনমেন্ট এবং docker (docker প্লাগ-ইন-এর মাধ্যমে) দুটিরই দুর্দান্ত সাপোর্ট আছে, এবং টেস্টিং, লিন্টিং, ফরম্যাটিং ও ওয়েব ডেভেলপমেন্টের জন্য অনেক রকম প্লাগ-ইন দিয়ে এটি বাড়ানো যায়।

Python for VS Code

Extension-id: ms-python.python

VS Code-এ Python এক্সটেনশনের হেডার

Microsoft-এর Python এক্সটেনশন হলো VS Code-এর জন্য Microsoft-এর অফিসিয়াল Python এক্সটেনশন, এবং ইনস্টল করার জন্য অত্যন্ত প্রস্তাবিত। এতে এনভায়রনমেন্ট ম্যানেজমেন্ট, টেস্ট ম্যানেজমেন্ট, লিন্টিং ও ডিবাগিংসহ বিস্তৃত ফিচার রয়েছে। সর্বশেষ রিলিজ অনুযায়ী, MS Python এক্সটেনশন ইনস্টল করলে pylance (Python কোড লিন্ট ও ভ্যালিডেট করার একটি জনপ্রিয় প্যাকেজ) এবং jupyter (Jupyter Notebook নিয়ে কাজ করার জন্য)ও ডাউনলোড হয়ে যাবে।

  • একটি সেটআপ টিউটোরিয়াল এখানে পাওয়া যায়, আর সেটিংস রেফারেন্সটি খুবই সহায়ক।
  • Python সংস্করণ সেটআপ ও ভার্চুয়াল এনভায়রনমেন্ট নিয়ে কাজ করার তথ্য এখানে পাওয়া যাবে।
  • VS Code-এ unittest ও pytest সেটআপ ও ব্যবহারের তথ্য এখানে পাওয়া যাবে।

PyCharm

PyCharm হলো JetBrains-এর তৈরি একটি IDE (ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট)। এটি Python-এর জন্যই বিশেষভাবে তৈরি এবং পেশাদারদের মধ্যে জনপ্রিয়। VS Code-এর মতোই এটি বিভিন্ন পেইড ও ফ্রি প্লাগ-ইন, থিম ও ফরম্যাটার দিয়ে বাড়ানো যায়। পেইড সংস্করণটি Django ডেভেলপমেন্ট, Docker ডেভেলপমেন্ট এবং ডেটাবেস ইন্টিগ্রেশন-ও সাপোর্ট করে।

Pycharm ও Pytest
  • pycharm-এর সাথে pytest সেটআপের ধাপগুলো এখানে পাওয়া যাবে।
  • Pycharm ডিফল্টভাবে unittest ব্যবহার করে, তাই আপনার pycharm-এর সাথে ব্যবহৃত এনভায়রনমেন্টে অবশ্যই pytest ইনস্টল থাকতে হবে (উপরের ইন্টারপ্রেটার ও এনভায়রনমেন্টের ডকুমেন্টগুলো দেখুন), এবং তারপর pycharm-কে সেটির দিকে পয়েন্ট করাতে হবে।
  • GUI থেকে সরাসরি টেস্ট রান করা সত্যিই সহজ, তবে আপনার পছন্দমতো সেটআপ করার জন্য পেছনে থাকা pytest প্যারামিটারগুলো ভালোভাবে দেখতে ভুলবেন না।
  • pycharm-এ টেস্ট রান ও ডিবাগিংয়ের সাধারণ ডকুমেন্টেশন এখানে পাওয়া যাবে।
  • অতিরিক্ত ডিবাগিং টুল ও নির্দেশনা এখানে পাওয়া যাবে।
    • সতর্কতা: pytest-এর coverage প্লাগ-ইন pycharm-এর ডিবাগার নষ্ট করে দেবে। আরও তথ্যের জন্য run/debug configuration: pytest দেখুন।

Spyder IDE

Spyder হলো বিজ্ঞানী সম্প্রদায়ের জন্য তৈরি একটি ক্রস-প্ল্যাটফর্ম, ফ্রি ও ওপেন সোর্স Python IDE। এটি সাধারণত Python-এর Anaconda ডিস্ট্রিবিউশনের সাথে থাকে, তবে আলাদাভাবেও ইনস্টল করা যায় এবং Python-এর যেকোনো সংস্করণের সাথে ব্যবহার করা যায়। সর্বোচ্চ নমনীয়তা এবং কোনো প্যাকেজ সংঘর্ষ না থাকা নিশ্চিত করতে আমরা স্ট্যান্ডঅ্যালোন ইনস্টলেশনের পরামর্শ দিই।

Spyder venv ও conda এনভায়রনমেন্ট সম্পূর্ণভাবে সাপোর্ট করে। এতে একটি ইন্টিগ্রেটেড IPython ইন্টারঅ্যাকটিভ টার্মিনাল, একটি ইন্টারঅ্যাকটিভ ডিবাগার এবং এডিটরের ভেতরে গ্রাফ আঁকা ও ডেটা এক্সপ্লোর করার সমৃদ্ধ সাপোর্ট আছে। অতিরিক্ত কোড কমপ্লিশন ও লিন্টিং kite-এর মাধ্যমে দেওয়া হয়। Jupyter Notebook ও টেস্টিং টুলের সাথে ইন্টিগ্রেশন কমিউনিটির তৈরি প্লাগ-ইনের মাধ্যমে দেওয়া হয়। Spyder API ব্যবহার করে আপনি নিজের প্লাগ-ইনও লিখতে পারেন।


Emacs

Emacs হলো Lisp-এ লেখা একটি ফ্রি, ওপেন সোর্স ও অত্যন্ত কাস্টমাইজযোগ্য টেক্সট এডিটর। Real Python-এ একটি দুর্দান্ত ইনস্টলেশন ও সেটআপ গাইড পাওয়া যায়।

  • Emacs Wiki-তেও Emacs দিয়ে Python প্রোগ্রামিংয়ের একটি ভালো গাইড আছে।
  • Full Stack Python-ও Emacs শুরু করার জন্য কিছু ভালো তথ্য ও লিঙ্ক সংকলন করেছে।

Vim

Vim হলো ইউনিক্সের স্ট্যান্ডার্ড vi টেক্সট এডিটরের একটি ফ্রি ও "উন্নত" সংস্করণ। এটি বিভিন্ন ধরনের অপারেটিং সিস্টেম ও Linux/Unix ফ্লেভারে পাওয়া যায়। Real Python-এ একটি দুর্দান্ত ইনস্টলেশন ও সেটআপ গাইড পাওয়া যায়, আর কাজের চিটশিট পাওয়া যায় vimsheet, glump ও rtorr-এ।

vim-এ Python কোড এডিট করা আপনার জন্য নয় বলে মনে হলেও, কিছু মৌলিক কমান্ডের সাথে পরিচিত হওয়ার পরামর্শ দেওয়া হয়। Linux ও Unix ডিস্ট্রিবিউশনে vim বা vi প্রায়ই একটি "বেস" বা "ডিফল্ট" টেক্সট এডিটর, এবং ওই সিস্টেমগুলোতে git কমিট মেসেজের (এবং আরও অনেক কিছুর) ডিফল্ট এডিটর। সম্ভাবনা আছে আপনি একদিন শুধু vi সম্বলিত কোনো *nix সিস্টেমে একটি কনফিগারেশন ফাইল এডিট করার প্রয়োজন পড়বেন, তাই vim থেকে বেরোতে জানা (অন্তত) ভালো আত্মরক্ষা।


Spacemacs

Spacemacs (github রেপো) হলো Emacs-এর একটি ফ্রি, কমিউনিটি-চালিত ডিস্ট্রিবিউশন, যা Emacs ও Vim দুটিরই কার্যকারিতা একত্রিত করে।

  • অফিসিয়াল ডকুমেন্টেশন এখানে পাওয়া যায়
  • opensource-এর এই গাইডে ইনস্টলেশন ও কনফিগারেশনের বিকল্পগুলোর সংক্ষিপ্ত বিবরণ আছে।
  • spacemacs-এর python layer টেস্টিং, লিন্টিং, এনভায়রনমেন্ট ম্যানেজমেন্ট ও কোড ফরম্যাটিংয়ের কার্যকারিতা যোগ করে।

Sublime text

Sublime text হলো কোডিংয়ের জন্য Sublime HQ Pty Ltd-এর তৈরি একটি পেইড টেক্সট এডিটর। এটি VS Code ও Atom-এর মতোই, কাস্টমাইজেশনের জন্য অনেক প্যাকেজ ও প্লাগ-ইন আছে। Python ব্যবহার করে আপনি এডিটরটির জন্য নিজের প্লাগ-ইনও বানাতে পারেন।