2011-07-23 15 views
7

मैं अजगर आवेदन विकसित करता हूं जिसे मैंने पैकेज में easy_install या pip द्वारा स्थापित करने का निर्णय लिया है। मैंने पाइथन पैकेज के लिए निर्देशिका संरचना के बारे में कई अच्छे स्रोत खोजने के लिए खोज का उपयोग किया है this answer या this post देखें।पायथन पैकेज में स्क्रिप्ट

मैं बनाया संरचना निम्नलिखित

 
Project/ 
|-- bin/ 
|-- my_package/ 
| |-- test/ 
| | |-- __init__.py 
| | |-- test_server.py 
| |-- __init__.py 
| |-- server.py 
| |-- util.py 
|-- doc/ 
| |-- index.rst 
|-- README.txt 
|-- LICENSE.txt 
|-- setup.py   

उसके बाद मैं निष्पादन स्क्रिप्ट server-run

 
#!/usr/bin/env python 
from my_package import server 

server.main() 

जो मैं में रखा बनाया (मैं कई फ़ाइलों की सूची में Strcture अधिक स्पष्ट हो बनाने के लिए हटा दिया है) bin निर्देशिका। अगर मैं python setup.py install के साथ अपना पैकेज इंस्टॉल करता हूं या pip/easy_install के माध्यम से सब ठीक काम करता है, तो मैं server-run चला सकता हूं और मेरा सर्वर इनकमिंग अनुरोधों को संभालने लगता है।

लेकिन मेरे सवाल (my_package की पूर्व स्थापना के बिना ) विकास के वातावरण में है कि server-run काम करता है परीक्षण करने के लिए कैसे है? इसके अलावा मैं dev स्क्रिप्ट के लिए नवीनतम सर्वर कोड चलाने के लिए इस स्क्रिप्ट का उपयोग करना चाहता हूं।

विकास Project निर्देशिका में होता है तो मैं ImportError हो रही है अगर मैं ./bin/server-run

 
[email protected]:~/dev/Project/$ ./bin/server-run 
Traceback (most recent call last): 
    File "./bin/server-run", line 2, in 
    import my_package 
ImportError: No module named my_package 

क्या यह संभव है चलाने अगर मैं जरूरी फाइल सिस्टम में कहीं किसी अन्य फ़ोल्डर से चलाने (नहीं तो यह काम करेंगे bin/server-run स्क्रिप्ट को संशोधित करने के लिए Project डीआईआर से)? यह भी ध्यान रखें कि मैं उत्पादन वातावरण में सर्वर चलाने के लिए एक ही स्क्रिप्ट (यदि हासिल करना संभव है) का उपयोग करना चाहता हूं।

उत्तर

3

आपको सापेक्ष आयात की आवश्यकता है। प्रयास करें

from .. import mypackage 

या

from ..mypackage import server 

प्रलेखन यहाँ

http://docs.python.org/tutorial/modules.html#intra-package-references

ये काम अजगर 2.5 या नए पर है।

केवल विकास संस्करण में यह करने के लिए, कोशिश:

try: 
    from my_package import server 
except ImportError: 
    from ..my_package import server 
+0

लेकिन अगर मैं इस कोड का उपयोग 'सर्वर-run' पैकेज स्थापना के बाद काम नहीं करेगा। – Alik

+0

पहले सामान्य संस्करण को आजमाने के तरीके के साथ अपडेट किया गया। – agf

+0

हू। मैं ImportException के बारे में भूल गया :) धन्यवाद! – Alik

4

आप परीक्षण अजगर कोड के लिए virtualenv उपयोग कर सकते हैं, जबकि विकास में, जैसे कि वह

2

सबसे आसान तरीका है सही कॉन्फ़िगर करने के लिए है जारी किया गया था पायथन पथ, इसलिए पाइथन वर्तमान निर्देशिका में my_package देखने के लिए जानता है।

लिनक्स पर (बैश का प्रयोग करके):

export PYTHONPATH=. 
bin/server-run 

विंडोज पर:

set PYTHONPATH=. 
python bin/server-run 
संबंधित मुद्दे