आपके प्रोजेक्ट द्वारा वास्तव में बनाए गए व्हील का परीक्षण करने के लिए, एक नया macOS वर्चुअल एनवायरनमेंट बनाएं, dist/ से व्हील फ़ाइल इंस्टॉल करें, और जांचें कि इसका मेटाडेटा और इम्पोर्ट व्यवहार सही हैं। Terminal में अपनी प्रोजेक्ट डायरेक्टरी से नीचे दिए गए कमांड चलाएं। यह आपके द्वारा उपयोग किए गए Python वर्ज़न और Mac आर्किटेक्चर के लिए इंस्टॉलेशन का परीक्षण करता है; यह प्रत्येक समर्थित Python वर्ज़न या Mac के साथ संगतता स्थापित नहीं करता है।
1. अपने प्रोजेक्ट से व्हील बनाएं
उस Python इंटरप्रेटर का उपयोग करें जिसका आप परीक्षण करना चाहते हैं। macOS पर, python3 Python 3 के लिए एक सामान्य कमांड है; यदि आप वर्ज़न मैनेजर का उपयोग करते हैं, तो पहले इच्छित इंटरप्रेटर चुनें। pyproject.toml वाली डायरेक्टरी से, Python Packaging Authority के build टूल के साथ एक व्हील बनाएं: Packaging Python Projects इस बिल्ड चरण और परिणामी dist/ डायरेक्टरी का दस्तावेजीकरण करता है।
python3 -m pip install --upgrade build
python3 -m build --wheel
बिल्ड कमांड dist/ में एक .whl फ़ाइल बनाता है। प्रोजेक्ट रूट से बिल्ड करने पर आर्टिफ़ैक्ट नीचे दिए गए इंस्टॉलेशन परीक्षण के लिए उपलब्ध हो जाता है। एक व्हील वह बिल्ट डिस्ट्रीब्यूशन है जिसका आप परीक्षण करना चाहते हैं; प्रोजेक्ट डायरेक्टरी को इंस्टॉल करना या एडिटेबल मोड का उपयोग करना एक अलग इंस्टॉलेशन पाथ का परीक्षण करेगा। सोर्स ट्री, बिल्ड आर्टिफ़ैक्ट्स और इंस्टॉलेशन के बीच अंतर के लिए The Packaging Flow देखें।
2. एक नया वर्चुअल एनवायरनमेंट बनाएं
एनवायरनमेंट को प्रोजेक्ट डायरेक्टरी में बनाएं, लेकिन बिल्ड आउटपुट को इससे अलग रखें। यदि .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 को शामिल करना चाहिए। Python का venv इसे बनाने के लिए उपयोग किए गए इंटरप्रेटर के आधार पर एक अलग (आइसोलेटेड) एनवायरनमेंट बनाता है, जिसमें इसके अपने इंस्टॉल किए गए पैकेज होते हैं; macOS Terminal का डिफ़ॉल्ट zsh यहाँ दिखाए गए source एक्टिवेशन कमांड का समर्थन करता है। Python का venv दस्तावेज़ आइसोलेशन और एक्टिवेशन दोनों की व्याख्या करता है। एक्टिवेशन पर या आपके शेल पाथ पर कौन सा python है, इस पर निर्भर रहने से बचने के लिए, शेष कमांड में python के स्थान पर .venv-wheel-test/bin/python का उपयोग करें।
3. व्हील फ़ाइल इंस्टॉल करें, सोर्स डायरेक्टरी नहीं
व्हील फ़ाइलों की सूची बनाएं ताकि आप परीक्षण के लिए सटीक आर्टिफ़ैक्ट की पहचान कर सकें:
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 डिपेंडेंसी इंस्टॉलेशन को छोड़ देता है, इसलिए उन पैकेजों की आवश्यकता वाले इम्पोर्ट विफल हो सकते हैं, भले ही व्हील स्वयं सही तरीके से इंस्टॉल हो जाए।
4. इंस्टॉलेशन और इम्पोर्ट व्यवहार की जांच करें
इंस्टॉल किए गए डिस्ट्रीब्यूशन मेटाडेटा की जांच करें और देखें कि क्या इसकी घोषित डिपेंडेंसीज़ सुसंगत हैं:
python -m pip show my-package
python -m pip check
pip show के लिए व्हील फ़ाइल नाम या प्रोजेक्ट मेटाडेटा में दिखाए गए डिस्ट्रीब्यूशन नाम का उपयोग करें; यह Python इम्पोर्ट नाम से भिन्न हो सकता है। फिर उस मॉड्यूल नाम का उपयोग करके एक इम्पोर्ट का परीक्षण करें जो आपका पैकेज दस्तावेजित करता है। उदाहरण के लिए, यदि मॉड्यूल my_package है, तो चलाएं:
python -c 'import my_package; print(my_package.__file__)'
एक सफल इम्पोर्ट जिसका फ़ाइल पाथ .venv-wheel-test के अंदर इंगित करता है, इस बात का प्रमाण है कि इंस्टॉल किया गया पैकेज टेस्ट एनवायरनमेंट से इम्पोर्ट किया जा रहा है। केवल एक इम्पोर्ट प्रत्येक फ़ंक्शन या एंट्री पॉइंट का परीक्षण नहीं करता है: यदि आपको व्यावहारिक कवरेज (बिहेवियरल कवरेज) की आवश्यकता है, तो इस एनवायरनमेंट के विरुद्ध अपने प्रोजेक्ट के प्रासंगिक परीक्षण चलाएं।
जब कोई व्हील इंस्टॉल होने में विफल रहता है
असंगत व्हील के बारे में एक त्रुटि का आम तौर पर अर्थ है कि इसके कम्पैटिबिलिटी टैग सक्रिय Python, macOS, या CPU आर्किटेक्चर से मेल नहीं खाते हैं। संकलित (कंपाइल्ड) एक्सटेंशन वाले व्हील प्लेटफ़ॉर्म-विशिष्ट हो सकते हैं; एक शुद्ध-Python (प्योर-पायथन) व्हील का व्यापक रूप से उपयोग किया जा सकता है। Platform compatibility tags specification बताता है कि इंस्टॉलर उन टैग्स का उपयोग कैसे करते हैं। जिस इंटरप्रेटर और Mac आर्किटेक्चर का आप समर्थन करना चाहते हैं, उसके लिए एक संगत व्हील बनाएं या प्राप्त करें, फिर नए बनाए गए एनवायरनमेंट में परीक्षण दोहराएं।
यदि इंस्टॉलेशन सफल होता है लेकिन कोई इम्पोर्ट विफल हो जाता है, तो जांचें कि इम्पोर्ट नाम सही है और प्रोजेक्ट द्वारा आवश्यक रनटाइम डिपेंडेंसीज़ घोषित की गई हैं। यदि व्हील इंस्टॉल हो जाता है लेकिन किसी मॉड्यूल या डेटा फ़ाइल को छोड़ देता है, तो व्हील सामग्री का निरीक्षण करें और फिर से बनाने से पहले प्रोजेक्ट के पैकेजिंग कॉन्फ़िगरेशन को ठीक करें। एक साफ़ एनवायरनमेंट अघोषित डिपेंडेंसीज़ और अनुपलब्ध पैकेज्ड फ़ाइलों को उजागर करने में मदद करता है जो डेवलपर एनवायरनमेंट में पैकेजों या सोर्स फ़ाइलों द्वारा छिपी हो सकती हैं।
एक सफल इंस्टॉल, डिपेंडेंसी जांच और लक्षित इम्पोर्ट इस Mac और Python वर्ज़न पर व्हील के व्यवहार के उपयोगी भागों की पुष्टि करते हैं। वे अन्य प्लेटफ़ॉर्म या Python वर्ज़न को सत्यापित नहीं करते हैं; उनका अलग से मेल खाने वाले इंटरप्रेटर्स और संगत व्हील बिल्ड्स के साथ परीक्षण करें।
स्रोत
Packaging Python Projects — Python Packaging Authority
The Packaging Flow — Python Packaging Authority
Install packages in a virtual environment using pip and venv — Python Packaging Authority
venv — Creation of virtual environments — Python Software Foundation
Platform compatibility tags — Python Packaging Authority