यह पिप (pip) के साथ संभव नहीं है। PyPI पर सभी पैकेजों के अद्वितीय नाम होते हैं। पैकेज अक्सर एक-दूसरे की आवश्यकता करते हैं और उन पर निर्भर करते हैं, और मानते हैं कि नाम नहीं बदलेगा। यहां तक कि अगर आप कोड को पायथन पथ पर रखने का प्रबंधन करते हैं, तो मॉड्यूल इम्पोर्ट करते समय, पायथन `sys.path` में पथों को क्रम से खोजता है और पहले मिलान पर रुक जाता है। इसलिए जो भी मॉड्यूल यह पहले ढूंढता है, यह वहीं रुक जाएगा।
सर्वोत्तम समाधान
आपका सबसे अच्छा विकल्प है लाइब्रेरी से सभी कोड को अपने कोडबेस में कॉपी करना, उनमें से किसी एक का मॉड्यूल नाम बदलना, और फिर इसे इम्पोर्ट करना।
अलग-अलग पैकेज से समान नाम के मॉड्यूल इम्पोर्ट करना
यदि आप अलग-अलग पैकेज से समान नाम के मॉड्यूल इम्पोर्ट कर रहे हैं, तो आप इसे इस प्रकार कर सकते हैं:
>> from foo import bar as first_bar
>>> from baz import bar as second_bar
अन्य विकल्प
1. नेमस्पेस पैकेज का उपयोग करें
# पैकेज संरचना
myproject/
foo/
__init__.py
bar.py
baz/
__init__.py
bar.py
# इम्पोर्ट
from myproject.foo import bar as foo_bar
from myproject.baz import bar as baz_bar
2. इम्पोर्ट एलियास (पायथन 3.3+)
import foo.bar as foo_bar
import baz.bar as baz_bar
3. वर्चुअल एनवायरनमेंट अलग करें
प्रत्येक प्रोजेक्ट के लिए अलग वर्चुअल एनवायरनमेंट बनाएं ताकि विरोधाभासी निर्भरताएं अलग रहें।
4. पिपएनवी / पॉएट्री (Pipenv / Poetry)
# Pipfile
[packages]
foo-bar = {path = "./foo", editable = true}
baz-bar = {path = "./baz", editable = true}
सारांश
| दृष्टिकोण | पक्ष | विपक्ष |
|---|---|---|
| कोड कॉपी करें और नाम बदलें | सरल, पूर्ण नियंत्रण | रखरखाव बोझ |
| इम्पोर्ट एलियास (`as`) | मानक, पठनीय | पैकेज नाम अलग होने चाहिए |
| नेमस्पेस पैकेज | संगठित संरचना | सेटअप जटिलता |
| अलग वर्चुअलएनवी | पूर्ण आइसोलेशन | संसाधन उपयोग |