आप आमतौर पर पायथन मॉड्यूल को एक फ़ाइल में एनकैप्सुलेट नहीं कर सकते। ऐसा करने से पायथन द्वारा उपयोग की जाने वाली मॉड्यूल खोज विधि (फ़ाइलें और डायरेक्टरी) नष्ट हो जाएगी। यदि आप किसी मशीन पर मॉड्यूल इंस्टॉल नहीं कर सकते (पर्याप्त अनुमति न होने के कारण), तो आप या तो `virtualenv` का उपयोग कर सकते हैं या मॉड्यूल फ़ाइलों को किसी अन्य डायरेक्टरी में सेव करके निम्नलिखित कोड का उपयोग करके पायथन को दिए गए मॉड्यूल में खोजने की अनुमति दे सकते हैं:
विधि 1: sys.path संशोधित करें
>>> import os, sys
>>> file_path = 'AdditionalModules/'
>>> sys.path.append(os.path.dirname(file_path))
>>> # अब पायथन मॉड्यूल इम्पोर्ट करने के लिए AdditionalModules फ़ोल्डर भी खोजेगा क्योंकि हमने इसे PYTHONPATH पर सेट किया है।
विधि 2: virtualenv का उपयोग (अनुशंसित)
आप एक आइसोलेटेड स्थानीय पायथन वातावरण बनाने के लिए `virtualenv` का उपयोग कर सकते हैं। संबोधित की जा रही मूल समस्या निर्भरता और संस्करणों की है, और अप्रत्यक्ष रूप से अनुमतियों की। कल्पना करें कि आपके पास एक एप्लिकेशन है जिसे `LibFoo` के संस्करण 1 की आवश्यकता है, लेकिन दूसरे एप्लिकेशन को संस्करण 2 की आवश्यकता है। आप दोनों एप्लिकेशन का उपयोग कैसे कर सकते हैं? यदि आप सब कुछ `/usr/lib/python2.7/site-packages` (या आपके प्लेटफॉर्म का मानक स्थान) में इंस्टॉल करते हैं, तो आप अनजाने में एक एप्लिकेशन को अपग्रेड करने की स्थिति में आसानी से पहुंच सकते हैं जिसे अपग्रेड नहीं किया जाना चाहिए। यह हमारे उपयोग के मामले में भी उपयोग किया जा सकता है जहां हम मशीन पर पैकेज इंस्टॉल नहीं कर सकते क्योंकि हमारे पास अनुमतियां नहीं हैं। अधिक जानकारी के लिए वर्चुअल एनवी डॉक्स पढ़ें: https://virtualenv.pypa.io/en/stable/
वास्तविक "सिंगल फ़ाइल" समाधान
1. zipapp (पायथन 3.5+) - मानक लाइब्रेरी
# प्रोजेक्ट संरचना
myapp/
├── main.py
├── module1.py
└── module2.py
# __main__.py बनाएं (एंट्री पॉइंट)
# zipapp बनाएं
python -m zipapp myapp -m "main:main" -o myapp.pyz
# चलाएं
python myapp.pyz
2. PyInstaller - स्टैंडअलोन एक्जीक्यूटेबल
pip install pyinstaller
pyinstaller --onefile main.py
# dist/main बनाता है (स्टैंडअलोन बाइनरी)
3. शिव (Shiv) - पायथन जिपऐप बिल्डर
pip install shiv
shiv -c myapp -o myapp.pyz -r requirements.txt .
4. stickytape - सिंगल-फ़ाइल स्क्रिप्ट
pip install stickytape
stickytape script.py --add-python-path . > standalone_script.py
5. पेक्स (Pex) - पुनरुत्पादन योग्य वातावरण
pip install pex
pex requests flask -o app.pex -e main:main
./app.pex
तुलना
| टूल | आउटपुट | उपयोग मामला |
|---|---|---|
| zipapp | .pyz | सरल, मानक लाइब्रेरी, कोई निर्भरता नहीं |
| PyInstaller | बाइनरी | स्टैंडअलोन एक्जीक्यूटेबल, C एक्सटेंशन सपोर्ट |
| Shiv | .pyz | निर्भरता सहित, तेज़ स्टार्टअप |
| stickytape | .py | प्योर पायथन, सिंगल फ़ाइल |
| Pex | .pex | पुनरुत्पादन योग्य, बहु-प्लेटफॉर्म |
निष्कर्ष
सच्चे "सिंगल फ़ाइल" वितरण के लिए, PyInstaller (बाइनरी) या Shiv/zipapp (पायथन जिपऐप) का उपयोग करें। `virtualenv` विकास/आइसोलेशन के लिए सर्वोत्तम रहता है।