2012-07-23 15 views
21

जब अजगर परियोजना के आयोजन, इस संरचना यह करने का एक मानक तरीका प्रतीत हो रहा है mycore.py तो मैं इसे माइस्क्रिप्ट में उपयोग कर सकता हूं?अजगर में बिन फ़ोल्डर में एक स्क्रिप्ट से अपने पैकेज/मॉड्यूल आयात करने के लिए कैसे

दोनों __init__.py फ़ाइलें खाली हैं। myscript की

सामग्री:

#!/usr/bin/env python 
from mypackage import core 
if __name__ == '__main__': 
    core.main() 

core.py की सामग्री

def main(): 
    print 'hello' 

जब मैं MyProject निर्देशिका के अंदर से myscript चलाने के लिए, मैं निम्नलिखित त्रुटि मिलती है:

Traceback (most recent call last): 
    File "bin/myscript", line 2, in <module> 
    from mypackage import core 
ImportError: No module named mypackage 

क्या क्या मैं याद कर रहा हूँ

+0

आपका 'sys.path' मान ('PythonPATH' पर्यावरण चर या पाइथन कोड द्वारा रन टाइम पर संशोधित) निर्धारित करता है कि' आयात' मॉड्यूल के लिए कहां खोज करेगा। – Borealid

+2

'setup.py' में 'entry_points [" console_scripts "]'' का उपयोग करने पर विचार करें। – kojiro

+1

'setup.py' की सामग्री क्या हैं? और यह myproject निर्देशिका में है? – mgilson

उत्तर

4

आमतौर पर, setup.py पैकेज को उस स्थान पर स्थापित करना चाहिए जहां पाइथन दुभाषिया इसे पा सकता है, इसलिए स्थापना के बाद import mypackage काम करेगा। विकास पेड़ से bin में स्क्रिप्ट चलाने की सुविधा के लिए, मैं आमतौर पर निर्देशिका में ../mypackage/ पर सिमलिंक जोड़ता हूं। बेशक, यह एक फाइल सिस्टम सिमलिंक समर्थन ...

+0

जैसा कि आपने सुझाव दिया है सिमलिंक का उपयोग करके, स्क्रिप्ट मेरीपैकेज ढूंढने में सक्षम थी, लेकिन अब मैं एक और समस्या में चला गया हूं ... प्रश्न में ऊपर मेरा संपादन देखें । –

+6

विकास के साथ "चालाक" सिम्लिंक का उपयोग करने के बजाय, एक [virtualenv] (http://pypi.python.org/pypi/virtualenv/) का उपयोग करें और अपने पथ में निष्पादन योग्य स्थापित करने के लिए 'python setup.py develop' चलाएं (जब आपने वर्चुअलएन्व को सक्रिय किया है) – SingleNegationElimination

+0

दरअसल, मैंने इसे अन्य मुद्दे से समझ लिया। –

0

मैं अगर वहाँ एक "सबसे अच्छा विकल्प" है यकीन नहीं है की आवश्यकता है, लेकिन अगले मेरे सामान्य अभ्यास है:

  1. रखें जो भी स्क्रिप्ट मैं में चला करना चाहते हैं/bin

  2. करते हैं "अजगर -m bin.script" dir में MyProject

  3. जब script.py में आयात, dir script.py जिसमें रूट के रूप में बैठा है पर विचार करें। तो

    from ..mypackage import core 
    

प्रणाली सिमलिंक का समर्थन करता है, तो यह एक बेहतर विकल्प है।

संबंधित मुद्दे