আপনার প্রোজেক্ট প্রকৃতপক্ষে যে হুইলটি তৈরি করেছে তা পরীক্ষা করতে, একটি নতুন macOS ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন, dist/ থেকে হুইল ফাইলটি ইনস্টল করুন এবং এর মেটাডেটা ও ইম্পোর্ট আচরণ সঠিক কিনা তা পরীক্ষা করুন। টার্মিনালে আপনার প্রোজেক্ট ডিরেক্টরি থেকে নিচের কমান্ডগুলো চালান। এটি আপনার ব্যবহৃত পাইথন সংস্করণ এবং ম্যাক আর্কিটেকচারের জন্য ইনস্টলেশন পরীক্ষা করে; এটি প্রতিটি সমর্থিত পাইথন সংস্করণ বা ম্যাক-এর সাথে সামঞ্জস্যতা নিশ্চিত করে না।
১. আপনার প্রোজেক্ট থেকে হুইল বিল্ড করুন
আপনি যে পাইথন ইন্টারপ্রেটারটি পরীক্ষা করতে চান সেটি ব্যবহার করুন। macOS-এ, পাইথন ৩-এর জন্য python3 একটি সাধারণ কমান্ড; আপনি যদি কোনো ভার্সন ম্যানেজার ব্যবহার করেন, তবে প্রথমে উদ্দিষ্ট ইন্টারপ্রেটারটি নির্বাচন করুন। pyproject.toml ধারণকারী ডিরেক্টরি থেকে, পাইথন প্যাকেজিং অথরিটির build টুলের সাহায্যে একটি হুইল বিল্ড করুন: Packaging Python Projects এই বিল্ড ধাপ এবং এর ফলে তৈরি হওয়া dist/ ডিরেক্টরি সম্পর্কে বিস্তারিত আলোচনা করে।
python3 -m pip install --upgrade build
python3 -m build --wheel
বিল্ড কমান্ডটি dist/-এ একটি .whl ফাইল তৈরি করে। প্রোজেক্টের রুট থেকে বিল্ড করার ফলে নিচের ইনস্টলেশন পরীক্ষার জন্য আর্টিফ্যাক্টটি প্রস্তুত হয়। হুইল হলো বিল্ট ডিস্ট্রিবিউশন যা আপনি পরীক্ষা করতে চান; প্রোজেক্ট ডিরেক্টরি ইনস্টল করা বা এডিটেবল মোড ব্যবহার করা একটি ভিন্ন ইনস্টলেশন পাথ পরীক্ষা করবে। সোর্স ট্রি, বিল্ড আর্টিফ্যাক্ট এবং ইনস্টলেশনের মধ্যকার পার্থক্যের জন্য The Packaging Flow দেখুন।
২. একটি নতুন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন
প্রোজেক্ট ডিরেক্টরিতে এনভায়রনমেন্ট তৈরি করুন, তবে বিল্ড আউটপুটকে এটি থেকে আলাদা রাখুন। যদি .venv-wheel-test ইতিমধ্যে বিদ্যমান থাকে এবং আপনি একটি পরিচ্ছন্ন রান চান, তবে প্রথমে এটি সরিয়ে ফেলুন; এই কমান্ডটি স্থায়ীভাবে সেই নির্দিষ্ট ডিরেক্টরি এবং এর বিষয়বস্তু মুছে ফেলে, তাই এটি চালানোর আগে পাথটি নিশ্চিত করুন।
rm -rf .venv-wheel-test
python3 -m venv .venv-wheel-test
source .venv-wheel-test/bin/activate
python -m pip --version
প্রদর্শিত pip পাথে .venv-wheel-test থাকা উচিত। পাইথনের venv এটি তৈরিতে ব্যবহৃত ইন্টারপ্রেটারের ওপর ভিত্তি করে একটি বিচ্ছিন্ন এনভায়রনমেন্ট তৈরি করে, যার নিজস্ব ইনস্টল করা প্যাকেজ থাকে; macOS টার্মিনালের ডিফল্ট zsh এখানে দেখানো source অ্যাক্টিভেশন কমান্ড সমর্থন করে। পাইথনের venv ডকুমেন্টেশন আইসোলেশন এবং অ্যাক্টিভেশন উভয় বিষয় ব্যাখ্যা করে। অ্যাক্টিভেশনের ওপর বা আপনার শেল পাথে কোন python আছে তার ওপর নির্ভরতা এড়াতে, অবশিষ্ট কমান্ডগুলোতে python-এর পরিবর্তে .venv-wheel-test/bin/python ব্যবহার করুন।
৩. হুইল ফাইলটি ইনস্টল করুন, সোর্স ডিরেক্টরি নয়
হুইল ফাইলগুলোর তালিকা দেখুন যাতে আপনি পরীক্ষার জন্য সঠিক আর্টিফ্যাক্টটি শনাক্ত করতে পারেন:
ls dist/*.whl
আউটপুট থেকে কাঙ্ক্ষিত ফাইলের নামটি নিচের কমান্ডে কপি করুন। উদ্ধৃতি চিহ্নগুলো রাখুন এবং উদাহরণের ফাইলের নামটিকে আসল নাম দিয়ে প্রতিস্থাপন করুন। প্রদর্শিত হাইফেনযুক্ত ফাইলের নামটি উদাহরণের জন্য; হুইলের নামে ডিস্ট্রিবিউশনের নাম, সংস্করণ এবং সামঞ্জস্যতা ট্যাগ অন্তর্ভুক্ত থাকে, তাই আপনারটি ভিন্ন হবে।
python -m pip install "dist/my_package-1.2.3-py3-none-any.whl"
এটি লোকাল হুইল ইনস্টল করে এবং প্রয়োজনে কনফিগার করা প্যাকেজ ইনডেক্স থেকে এর ঘোষিত ডিপেন্ডেন্সিগুলো সমাধান করে। এটি আপনার সোর্স ডিরেক্টরি ইনস্টল করে না। pip সরাসরি লোকাল ডিস্ট্রিবিউশন আর্কাইভ ইনস্টল করা সমর্থন করে, যা Install packages in a virtual environment using pip and venv-এ বর্ণিত হয়েছে। পরীক্ষাটি যদি নেটওয়ার্ক অ্যাক্সেস ছাড়াই সম্পন্ন করতে হয়, তবে হুইলের ডিপেন্ডেন্সিগুলোকেও লোকালভাবে উপলব্ধ করুন; অন্যথায় ডিপেন্ডেন্সি রেজোলিউশন ব্যর্থ হতে পারে। আপনি যদি --no-deps ব্যবহার করেন, তবে pip ডিপেন্ডেন্সি ইনস্টলেশন এড়িয়ে যায়, যার ফলে হুইলটি সঠিকভাবে ইনস্টল হলেও যেসব ইম্পোর্টের জন্য ওই প্যাকেজগুলো প্রয়োজন তা ব্যর্থ হতে পারে।
৪. ইনস্টলেশন এবং ইম্পোর্ট আচরণ পরীক্ষা করুন
ইনস্টল করা ডিস্ট্রিবিউশন মেটাডেটা এবং এর ঘোষিত ডিপেন্ডেন্সিগুলো সঙ্গতিপূর্ণ কিনা তা পরীক্ষা করুন:
python -m pip show my-package
python -m pip check
pip show-এর জন্য হুইল ফাইলের নাম বা প্রোজেক্ট মেটাডেটাতে দেখানো ডিস্ট্রিবিউশন নামটি ব্যবহার করুন; এটি পাইথন ইম্পোর্ট নামের চেয়ে ভিন্ন হতে পারে। তারপর আপনার প্যাকেজে উল্লেখিত মডিউল নামটি ব্যবহার করে একটি ইম্পোর্ট পরীক্ষা করুন। উদাহরণস্বরূপ, যদি মডিউলটি my_package হয়, তবে চালান:
python -c 'import my_package; print(my_package.__file__)'
একটি সফল ইম্পোর্ট যার ফাইল পাথ .venv-wheel-test-এর ভেতর নির্দেশ করে, তা প্রমাণ করে যে ইনস্টল করা প্যাকেজটি টেস্ট এনভায়রনমেন্ট থেকেই ইম্পোর্ট করা হচ্ছে। শুধুমাত্র একটি ইম্পোর্ট প্রতিটি ফাংশন বা এন্ট্রি পয়েন্ট পরীক্ষা করে না: আপনার যদি আচরণগত কভারেজের প্রয়োজন হয় তবে এই এনভায়রনমেন্টের বিরুদ্ধে আপনার প্রোজেক্টের প্রাসঙ্গিক টেস্টগুলো চালান।
হুইল ইনস্টল করতে ব্যর্থ হলে
একটি বেমানান (incompatible) হুইল সম্পর্কিত ত্রুটির অর্থ সাধারণত এই যে, এর সামঞ্জস্যতা ট্যাগগুলো সক্রিয় পাইথন, macOS, বা CPU আর্কিটেকচারের সাথে মেলে না। কম্পাইল করা এক্সটেনশন ধারণকারী হুইলগুলো প্ল্যাটফর্ম-নির্দিষ্ট হতে পারে; একটি পিওর-পাইথন হুইল আরও ব্যাপকভাবে ব্যবহারযোগ্য হতে পারে। প্ল্যাটফর্ম সামঞ্জস্যতা ট্যাগ সংক্রান্ত স্পেসিফিকেশন ব্যাখ্যা করে যে কীভাবে ইনস্টলাররা এই ট্যাগগুলো ব্যবহার করে। আপনি যে ইন্টারপ্রেটার এবং ম্যাক আর্কিটেকচার সমর্থন করতে চান তার জন্য একটি সামঞ্জস্যপূর্ণ হুইল বিল্ড বা সংগ্রহ করুন, তারপর নতুন তৈরি করা এনভায়রনমেন্টে পরীক্ষাটি আবার করুন।
যদি ইনস্টলেশন সফল হয় কিন্তু ইম্পোর্ট ব্যর্থ হয়, তবে ইম্পোর্ট নামটি সঠিক কিনা এবং প্রয়োজনীয় রানটাইম ডিপেন্ডেন্সিগুলো প্রোজেক্ট দ্বারা ঘোষিত হয়েছে কিনা তা পরীক্ষা করুন। যদি হুইল ইনস্টল হয় কিন্তু কোনো মডিউল বা ডেটা ফাইল বাদ পড়ে যায়, তবে পুনরায় বিল্ড করার আগে হুইলের বিষয়বস্তু পরীক্ষা করুন এবং প্রোজেক্টের প্যাকেজিং কনফিগারেশন সংশোধন করুন। একটি পরিচ্ছন্ন এনভায়রনমেন্ট অঘোষিত ডিপেন্ডেন্সি এবং বাদ পড়া প্যাকেজ ফাইলগুলো প্রকাশ করতে সাহায্য করে, যা ডেভেলপার এনভায়রনমেন্টে থাকা প্যাকেজ বা সোর্স ফাইলগুলোর কারণে আড়ালে থেকে যেতে পারে।
একটি সফল ইনস্টলেশন, ডিপেন্ডেন্সি পরীক্ষা এবং নির্দিষ্ট ইম্পোর্ট এই ম্যাক এবং পাইথন সংস্করণে হুইলের আচরণের কার্যকর দিকগুলো নিশ্চিত করে। এগুলো অন্যান্য প্ল্যাটফর্ম বা পাইথন সংস্করণ যাচাই করে না; ম্যাচিং ইন্টারপ্রেটার এবং সামঞ্জস্যপূর্ণ হুইল বিল্ডের মাধ্যমে সেগুলোকে আলাদাভাবে পরীক্ষা করুন।
উৎসসমূহ
Packaging Python Projects — পাইথন প্যাকেজিং অথরিটি
The Packaging Flow — পাইথন প্যাকেজিং অথরিটি
Install packages in a virtual environment using pip and venv — পাইথন প্যাকেজিং অথরিটি
venv — Creation of virtual environments — পাইথন সফটওয়্যার ফাউন্ডেশন
Platform compatibility tags — পাইথন প্যাকেজিং অথরিটি