আপনি যদি আপনার ম্যাক-এ কোনো পাইথন প্রজেক্ট স্থানান্তর করে থাকেন এবং এর .venv কাজ করা বন্ধ করে দেয়, তবে প্রজেক্টের নতুন অবস্থানে এনভায়রনমেন্টটি পুনরায় তৈরি করুন। পাইথন ভার্চুয়াল এনভায়রনমেন্টে এমন পাথ অন্তর্ভুক্ত থাকে যা সেগুলি তৈরির অবস্থানের সাথে আবদ্ধ, তাই ফোল্ডারের নাম বা প্যারেন্ট ডিরেক্টরি পরিবর্তন করলে তা অ্যাক্টিভেশন এবং ইনস্টল করা কমান্ডগুলোকে অকেজো করে দিতে পারে। আপনার প্রজেক্ট ফাইলগুলো রাখুন, কেবল পুরানো .venv মুছে ফেলুন, তারপর একটি নতুন এনভায়রনমেন্ট তৈরি করুন এবং প্রজেক্টের ডিপেন্ডেন্সি ফাইলগুলো থেকে ডিপেন্ডেন্সিগুলো পুনরায় ইনস্টল করুন। পাইথনের venv ডকুমেন্টেশন-এ এনভায়রনমেন্টগুলোকে সাধারণত নন-পোর্টেবল (এক স্থান থেকে অন্য স্থানে স্থানান্তরযোগ্য নয়) হিসেবে বর্ণনা করা হয়েছে এবং স্থানান্তরের পর নতুন করে তৈরি করার পরামর্শ দেওয়া হয়েছে।
স্থানান্তরিত এনভায়রনমেন্ট কেন কাজ করা বন্ধ করে দেয়
একটি ভার্চুয়াল এনভায়রনমেন্ট তার নিজস্ব পাইথন কনফিগারেশন সংরক্ষণ করে এবং এনভায়রনমেন্টের ইন্টারপ্রেটারের পাথ সহ ইনস্টল করা স্ক্রিপ্টগুলো তৈরি করে। আপনি যখন প্রজেক্ট ফোল্ডারটি সরিয়ে নেন, তখন সেই পাথগুলো হয়তো পুরানো অবস্থানটিকেই নির্দেশ করতে পারে। এর ফলে source .venv/bin/activate কোনো হারিয়ে যাওয়া ফাইলকে নির্দেশ করতে পারে, অথবা এনভায়রনমেন্টে ইনস্টল করা কোনো কমান্ড এমন একটি ইন্টারপ্রেটার কল করতে পারে যার আর কোনো অস্তিত্ব নেই। অ্যাক্টিভেশন পুনরায় চালানো বা এনভায়রনমেন্টের নাম পরিবর্তন করা সেই এমবেড করা পাথগুলোকে নির্ভরযোগ্যভাবে মেরামত করতে পারে না; পাইথনের ডকুমেন্টেশনে উল্লেখিত সমাধান হলো এর নতুন অবস্থানে এনভায়রনমেন্টটি পুনরায় তৈরি করা। Python: venv and how environments work
১. স্থানান্তরিত প্রজেক্টটি টার্মিনালে খুলুন
টার্মিনালে, প্রজেক্টের বর্তমান ডিরেক্টরিতে যান। zsh বা bash-এ, পাথটিতে যদি স্পেস বা শেল ক্যারেক্টার থাকে তবে তা উদ্ধৃতি চিহ্নের (quote) মধ্যে রাখুন; উদাহরণের পাথের জায়গায় আসল ফোল্ডারের অবস্থানটি লিখুন:
cd "$HOME/Projects/My Python Project"
pwd
ls -la
যাচাই করুন যে আপনি প্রজেক্ট রুটে আছেন এবং এর সোর্স ফাইল ও ডিপেন্ডেন্সির বিবরণ দেখতে পাচ্ছেন। সাধারণ ডিপেন্ডেন্সি রেকর্ডের মধ্যে রয়েছে requirements.txt, pyproject.toml, এবং প্রজেক্ট-নির্দিষ্ট লক ফাইল। পুরো প্রজেক্ট বা এর ডিপেন্ডেন্সি ফাইলগুলো মুছে ফেলবেন না। কোনটি পুরানো এনভায়রনমেন্ট ডিরেক্টরি তা নিশ্চিত না হলে, কিছু মুছে ফেলার আগে এর বিষয়বস্তু পরীক্ষা করে দেখুন।
২. কেবল পুরানো এনভায়রনমেন্টটি মুছে ফেলুন
এনভায়রনমেন্ট ডিরেক্টরিটির নাম যদি .venv হয় এবং এটি প্রজেক্ট রুটের ভেতরে থাকে, তবে শুধু সেই ডিরেক্টরিটি মুছে ফেলুন। শেল প্রম্পট যদি দেখায় যে এটি সক্রিয় (active) আছে, তবে প্রথমে এটি নিষ্ক্রিয় (deactivate) করুন; এর জন্য ডকুমেন্টেড শেল কমান্ডটি হলো deactivate। এরপর চালান:
deactivate
rm -rf .venv
যদি কোনো এনভায়রনমেন্ট সক্রিয় না থাকে, তবে deactivate কমান্ডটি পাওয়া যাচ্ছে না এমন বার্তা দিতে পারে; এটিকে এড়িয়ে এগিয়ে যান। rm -rf .venv চালানোর আগে, যাচাই করুন যে pwd প্রজেক্টের রুট দেখাচ্ছে এবং .venv-ই সেই এনভায়রনমেন্ট যা আপনি প্রতিস্থাপন করতে চান। আপনার এনভায়রনমেন্ট যদি অন্য কোনো নাম ব্যবহার করে বা অন্য কোথাও থাকে, তবে এর সঠিক পাথটি দিন এবং প্রজেক্টের সোর্স বা ডেটা মুছে ফেলা থেকে বিরত থাকুন। পাইথন নতুন অবস্থানে এনভায়রনমেন্ট পুনরায় তৈরি করার পর পুরানোটি মুছে ফেলার পরামর্শ দেয়; এই নিবন্ধে উদ্দিষ্ট লক্ষ্যটিকে স্পষ্ট করার জন্য এটি আগেই মুছে ফেলা হয়েছে। Python: venv and how environments work
৩. উদ্দিষ্ট পাইথন দিয়ে এনভায়রনমেন্টটি পুনরায় তৈরি করুন
প্রজেক্টে যদি কোনো পাইথন সংস্করণ নির্দিষ্ট করা থাকে, তবে আপনার ম্যাক-এ উপলব্ধ সেই একই ইন্টারপ্রেটার ব্যবহার করুন। উদাহরণস্বরূপ, যখন python3.12 ইনস্টল করা থাকে এবং প্রজেক্টের জন্য সেই সংস্করণটির প্রয়োজন হয়:
python3.12 -m venv .venv
source .venv/bin/activate
python --version
python -m pip --version
প্রজেক্টে যদি কোনো সংস্করণ নির্দিষ্ট করা না থাকে এবং আপনার সাধারণ python3 উপযুক্ত হয়, তবে তার বদলে python3 -m venv .venv ব্যবহার করুন। macOS-এ, zsh এবং bash-এর জন্য স্ট্যান্ডার্ড অ্যাক্টিভেশন কমান্ড হলো source .venv/bin/activate। প্যাকেজগুলো পুনরুদ্ধার করার আগে python --version-এর আউটপুট যাচাই করুন; একবার সক্রিয় হয়ে গেলে python কমান্ডটির এনভায়রনমেন্টের ইন্টারপ্রেটারকে নির্দেশ করা উচিত। Python: venv activation and interpreter paths
Homebrew ব্যবহারকারীদের প্রজেক্ট প্যাকেজগুলো ভার্চুয়াল এনভায়রনমেন্টের ভেতরে রাখা উচিত। Homebrew তার বর্তমান পাইথনকে বাহ্যিকভাবে পরিচালিত (externally managed) হিসেবে নথিভুক্ত করে এবং ডিপেন্ডেন্সির জন্য একটি প্রজেক্ট এনভায়রনমেন্ট ব্যবহারের পরামর্শ দেয়। যদি python3 অনুপস্থিত থাকে বা কোনো অনুপযুক্ত ইন্টারপ্রেটার নির্বাচন করে, তবে যে ইনস্টলার বা সংস্করণ ম্যানেজার প্রজেক্টের পাইথন সরবরাহ করেছে তার সাহায্য নিন; macOS-পরিচালিত পাইথন ডিরেক্টরিগুলোতে প্যাকেজ ইনস্টল করে এনভায়রনমেন্ট ঠিক করার চেষ্টা করবেন না। Homebrew: Language Runtimes and Packages
৪. প্রজেক্ট থেকে ডিপেন্ডেন্সিগুলো পুনরায় ইনস্টল করুন
উপলব্ধ থাকলে প্রজেক্টের বিদ্যমান ডিপেন্ডেন্সি নির্দেশনা বা লক ফাইল ব্যবহার করুন। যে প্রজেক্ট requirements.txt-এ ডিপেন্ডেন্সি ট্র্যাক করে, সেটির জন্য এনভায়রনমেন্টের পাইথন এবং pip দিয়ে সেগুলো পুনরায় ইনস্টল করুন:
python -m pip install -r requirements.txt
python -m pip ব্যবহার করলে pip সরাসরি python দ্বারা নির্বাচিত ইন্টারপ্রেটারের সাথে যুক্ত থাকে। প্রজেক্টটি যদি অন্য কোনো ডিপেন্ডেন্সি ম্যানেজার বা লক ফাইল ব্যবহার করে, তবে নতুন করে requirements ফাইল তৈরি না করে বা লক ফাইল উপেক্ষা না করে সেই টুলের ডকুমেন্টেড ইনস্টল প্রক্রিয়া অনুসরণ করুন। একটি নতুন venv-এ ডিফল্টভাবেই pip অন্তর্ভুক্ত থাকে, এবং পাইথনের ডকুমেন্টেশনে ইনস্টল করা প্যাকেজগুলো পুনরায় তৈরি করার উপায় হিসেবে বিশেষভাবে একটি requirements ফাইলের কথা বলা হয়েছে। Python: venv, Python: Installing Python modules
কোনো প্যাকেজের জন্য এমন কম্পাইলার, নেটিভ লাইব্রেরি বা পাইথন সংস্করণের প্রয়োজন হওয়ার কারণে যদি ইনস্টলেশন ব্যর্থ হয় যা প্রজেক্টটি সমর্থন করে না, তবে ভার্চুয়াল এনভায়রনমেন্টটি সঠিকভাবে পুনরায় তৈরি করা হলেও সেই ডিপেন্ডেন্সিটির ক্ষেত্রে তার প্রয়োজনীয় শর্ত পূরণ নাও হতে পারে। প্যাকেজ বা প্রজেক্টের ইনস্টলেশন নির্দেশিকা পড়ুন এবং নির্দিষ্ট ত্রুটির সমাধান করুন; এর প্রতিকার হিসেবে sudo pip ব্যবহার করবেন না বা সিস্টেম পাইথন ফাইলের মালিকানা পরিবর্তন করবেন না। Homebrew পরিচালিত ডিরেক্টরিগুলোর ক্ষেত্রে এই ধরণের পদক্ষেপ না নেওয়ার পরামর্শ দেয়। Homebrew: Language Runtimes and Packages
৫. মেরামত করা এনভায়রনমেন্টটি সক্রিয় কিনা তা পরীক্ষা করুন
নির্বাচিত ইন্টারপ্রেটারটি নতুন .venv-এর ভেতরে রয়েছে কিনা তা নিশ্চিত করুন, তারপর প্রজেক্টের স্বাভাবিক কমান্ড বা টেস্ট সংক্রান্ত নির্দেশনাগুলো চালান:
python -c 'import sys; print(sys.executable)'
প্রদর্শিত পাথটি প্রজেক্টের .venv ডিরেক্টরির ভেতরের পথ নির্দেশ করা উচিত। এটি যদি অন্য কোথাও নির্দেশ করে, তবে প্রজেক্ট রুট থেকে এনভায়রনমেন্টটি আবার সক্রিয় করুন এবং শেল স্টার্টআপ সেটিংস বা কমান্ড অ্যালিয়াসগুলো পরীক্ষা করুন যা পাইথন নির্বাচন পরিবর্তন করে থাকতে পারে। এই পরীক্ষাটি শুধুমাত্র ইন্টারপ্রেটার নির্বাচন নিশ্চিত করে; এটি প্রজেক্টের প্রতিটি ডিপেন্ডেন্সি বা অ্যাপ্লিকেশনের ফিচার কাজ করছে কিনা তা প্রমাণ করে না।
একটি স্থানান্তরিত ভার্চুয়াল এনভায়রনমেন্টকে ফেলে দেওয়ার মতো (disposable) হিসেবে গণ্য করাই সবচেয়ে ভালো: সোর্স কোড এবং ডিপেন্ডেন্সি রেকর্ডগুলো সংরক্ষণ করুন, তারপর প্রজেক্টটি বর্তমানে যেখানে রয়েছে সেখানেই .venv পুনরায় তৈরি করুন। পুনরায় স্থানান্তরের পর এই পদক্ষেপগুলোর পুনরাবৃত্তি করাই হলো নির্ভরযোগ্য ডকুমেন্টেড রিকভারি পদ্ধতি।
তথ্যসূত্র
venv — Creation of virtual environments — Python Software Foundation
Installing Python modules — Python Software Foundation
Language Runtimes and Packages — Homebrew