मैंने सिबलिंग पैकेज से आयात के संबंध में भी एक समान उत्तर पोस्ट किया। आप इसे यहाँ देख सकते हैं ।
sys.path
हैक्स के बिना समाधान
सारांश
- एक फ़ोल्डर में कोड लपेटें (उदाहरण के लिए
packaged_stuff
)
setup.py
स्क्रिप्ट बनाएँ का उपयोग करें जहाँ आप setuptools.setup () का उपयोग करते हैं ।
- पिप पैकेज को संपादन योग्य अवस्था में स्थापित करता है
pip install -e <myproject_folder>
- का उपयोग कर आयात करें
from packaged_stuff.modulename import function_name
सेट अप
मैं प्रश्न में के रूप में एक ही फ़ोल्डर संरचना मान
.
└── ptdraft
├── __init__.py
├── nib.py
└── simulations
├── __init__.py
└── life
├── __init__.py
└── life.py
मैं .
रूट फ़ोल्डर को कॉल करता हूं , और मेरे मामले में यह स्थित है C:\tmp\test_imports
।
कदम
1) setup.py
रूट फ़ोल्डर में एक जोड़ें
की सामग्री setup.py
बस हो सकती है
from setuptools import setup, find_packages
setup(name='myproject', version='1.0', packages=find_packages())
मूल रूप से "कोई भी" setup.py
काम करेगा। यह सिर्फ एक न्यूनतम काम करने का उदाहरण है।
2) एक आभासी वातावरण का उपयोग करें
यदि आप आभासी वातावरण से परिचित हैं, तो एक को सक्रिय करें, और अगले चरण पर जाएं। आभासी वातावरण के उपयोग की बिल्कुल आवश्यकता नहीं है, लेकिन वे वास्तव में लंबे समय में आपकी मदद करेंगे (जब आपके पास 1 से अधिक परियोजना चल रही हो ..)। सबसे बुनियादी चरण हैं (रूट फ़ोल्डर में चलाएँ)
- वर्चुअल एनवी बनाएं
- वर्चुअल एनवी को सक्रिय करें
. /venv/bin/activate
(लिनक्स) या ./venv/Scripts/activate
(विन)
इसके बारे में अधिक जानने के लिए, बस Google "python virtualenv ट्यूटोरियल" या समान। आपको संभवतः किसी भी अन्य कमांड को बनाने, सक्रिय करने और निष्क्रिय करने की आवश्यकता नहीं है।
एक बार जब आप एक आभासी वातावरण बना और सक्रिय कर लेते हैं, तो आपके कंसोल को कोष्ठक में आभासी वातावरण का नाम देना चाहिए
PS C:\tmp\test_imports> python -m venv venv
PS C:\tmp\test_imports> .\venv\Scripts\activate
(venv) PS C:\tmp\test_imports>
3) संपादन योग्य अवस्था में अपनी परियोजना को स्थापित करें
myproject
का उपयोग कर अपने शीर्ष स्तर पैकेज स्थापित करें pip
। चाल का उपयोग करने के लिए है-e
स्थापित करते समय ध्वज । इस तरह यह एक संपादन योग्य राज्य में स्थापित है, और .py फ़ाइलों के लिए किए गए सभी संपादन स्वचालित रूप से स्थापित पैकेज में शामिल हो जाएंगे।
रूट निर्देशिका में, चलाएँ
pip install -e .
(डॉट नोट करें, यह "वर्तमान निर्देशिका" के लिए है)
आप यह भी देख सकते हैं कि इसका उपयोग करके स्थापित किया गया है pip freeze
(venv) PS C:\tmp\test_imports> pip install -e .
Obtaining file:///C:/tmp/test_imports
Installing collected packages: myproject
Running setup.py develop for myproject
Successfully installed myproject
(venv) PS C:\tmp\test_imports> pip freeze
myproject==1.0
4) प्रीपेंडिंग द्वारा आयात करें mainfolder
हर आयात के लिए आयात करें
इस उदाहरण में, mainfolder
होगा ptdraft
। इसका यह फायदा है कि आप अन्य मॉड्यूल नामों (अजगर मानक पुस्तकालय या 3 पार्टी मॉड्यूल से) के साथ टकराव में नहीं चलेंगे।
उदाहरण उपयोग
nib.py
def function_from_nib():
print('I am the return value from function_from_nib!')
life.py
from ptdraft.nib import function_from_nib
if __name__ == '__main__':
function_from_nib()
भागती हुई जिंदगी
(venv) PS C:\tmp\test_imports> python .\ptdraft\simulations\life\life.py
I am the return value from function_from_nib!