Python virtual environment ও packaging: পরিষ্কার সেটআপ

প্রতিটি প্রকল্পে একটি virtual environment dependency-র দ্বন্দ্ব ঠেকায়। venv, requirements ফাইল ও ন্যূনতম pyproject.toml শিখুন।

এলোমেলো package-এর পাশে একটি পরিষ্কার, বেড়া দেওয়া environment বাক্স

দুটি প্রকল্পের জন্য একই library-র দুটি আলাদা সংস্করণ লাগে। দুটিই global ইনস্টল করলে একটি ভাঙে। Virtual environment (venv) এটি সারায়: একটি ফোল্ডার যাতে শুধু একটি প্রকল্পের জন্য Python interpreter-এর নিজস্ব লিংক ও ইনস্টল করা package থাকে। প্রত্যেক Python ডেভেলপারের উচিত অভ্যাস করে প্রতি প্রকল্পে একটি বানানো। নিচের venv command প্রকাশের আগে চালানো।

প্রতিদিনের ধারা

python3 -m venv .venv            # create the environment in the project folder
source .venv/bin/activate        # Windows: .venv\Scripts\activate
python -m pip install requests   # installs into .venv only
python -m pip freeze > requirements.txt
deactivate
  • .venv শুধু একটি ফোল্ডার। যেকোনো সময় মুছে আবার বানান; requirements.txt রাখলে কিছু হারায় না।
  • সাধারণ pip-এর বদলে python -m pip ব্যবহার করুন। এতে যে Python চালাচ্ছেন তারই pip ব্যবহার নিশ্চিত হয়।
  • .gitignore-এ .venv/ যোগ করুন। কখনও commit করবেন না।

ভেতরে আছেন কি না দেখুন

import sys
print(sys.prefix.endswith(".venv"), sys.base_prefix != sys.prefix)   # True when you are inside a venv
$ python3 -m venv venvdemo
$ ./venvdemo/bin/python -c "import sys; print(sys.prefix.endswith('venvdemo'), sys.base_prefix != sys.prefix)"
True True
$ ./venvdemo/bin/python -m pip list
Package Version
------- -------
pip     25.1.1
$ ./venvdemo/bin/python -m pip freeze | wc -l
0

নতুন environment-এ শুধু pip থাকে, তাই pip freeze কিছুই দেখায় না। এটিই উদ্দেশ্য: আপনার প্রকল্প শুধু যা চায় তাই পায়।

লিখে রাখা ও আবার গড়া

  • pip freeze > requirements.txt ইনস্টল হওয়া সঠিক সংস্করণ লেখে। অন্য মেশিনে: python -m pip install -r requirements.txt।
  • চাইলে দুটি ফাইল রাখুন: আপনার বাছা ছোট তালিকা (requests) আর পুরো frozen তালিকা।
  • অ্যাপে সংস্করণ pin করুন (পুনরুৎপাদনযোগ্য), কিন্তু library-তে পরিসর দিন (যাতে ব্যবহারকারী মেলাতে পারে)।

এক মিনিটে packaging

অন্যরা, বা আপনি অন্য মেশিনে, প্রকল্পটি ইনস্টল করবেন এমন হলে pyproject.toml-এ বর্ণনা দিন:

[project]
name = "invoice-tool"
version = "0.1.0"
requires-python = ">=3.10"
dependencies = ["requests>=2.31"]

[project.scripts]
invoice = "invoice_tool.cli:main"

[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"

এটি configuration, output নয়; নিশ্চিত হতে আপনার মেশিনে python -m pip install . বা python -m build চালান। code রাখুন একটি package ফোল্ডারে (invoice_tool/), সঙ্গে __init__.py। [project.scripts] লাইনটি একটি invoice command বানায়।

সাধারণ ভুল

  • সিস্টেমের Python-এ ইনস্টল (sudo pip install) করে অপারেটিং সিস্টেমের টুল ভাঙা। venv ব্যবহার করুন।
  • activate করতে ভুলে import ব্যর্থ হলে অবাক হওয়া। which python দেখুন।
  • .venv বা __pycache__ ফোল্ডার commit করা।
  • সংস্করণ pin না করা, তাই এক মাস পর dependency আপডেটে অ্যাপ ভাঙে।
  • কয়েকটি প্রকল্পে একটি environment ব্যবহার।
  • venv ফোল্ডার অন্য মেশিনে কপি করা: এতে absolute path থাকে। আবার বানান।

মূল কথা: প্রতি প্রকল্পে একটি venv, ভেতরে python -m pip, আবার গড়তে requirements.txt, আর ইনস্টলযোগ্য করতে pyproject.toml।


Programming roadmaps সিরিজ, পর্ব ৩ (ভালো Python লেখা): 1 নম্বর (মোট 5)। আগের লেখা: Software testing-এর গোড়া: test pyramid ও কী test করবেন.

আরও পড়ুন

Python-এ regular expression: ফাঁদসহ ব্যবহারিক গাইড

Regular expression লেখা খুঁজে নতুন রূপ দেয়। group, greedy বনাম lazy, বাংলাদেশি মোবাইল নম্বর যাচাই ও যে backtracking ফাঁদ server জমিয়ে দিতে পারে তা শিখুন।

প্রোগ্রামিং•২ মিনিটে পড়া

Greedy algorithm: interval scheduling ও greedy কখন ব্যর্থ

Greedy algorithm প্রতি ধাপে এখনকার সেরা মনে হওয়া পছন্দ নেয়। এটি দ্রুত ও কখনও সর্বোত্তম। interval scheduling, greedy ভুল হওয়া একটি coin উদাহরণ ও যাচাইয়ের উপায় দেখুন।

Interview ও DSA•৩ মিনিটে পড়া