2012-11-08 13 views
9

मैं एडब्ल्यूएस एपीआई के साथ कुछ काम करने के लिए एक साधारण IronWorker in Python लिख रहा हूं।आयरनवर्कर में पाइथन निर्भरताओं को कैसे बंडल करें?

ऐसा करने के लिए मैं boto library का उपयोग करना चाहता हूं जो PiPy के माध्यम से वितरित किया जाता है। बोटो लाइब्रेरी डिफ़ॉल्ट रूप से IronWorker रनटाइम वातावरण में स्थापित नहीं है।

मैं अपने आयरनवर्कर कोड के साथ बोटो लाइब्रेरी निर्भरता को कैसे बंडल कर सकता हूं?

आदर्श रूप में मुझे लगता है मैं gem dependancy bundling available for Ruby IronWorkers की तरह कुछ का उपयोग कर सकते आशा करती हूं कि -

gemfile '../Gemfile', 'common', 'worker' # merges gems from common and worker groups 

Python Loggly sample में निर्दिष्ट myRuby.worker में यानी, मुझे लगता है कि हूवर पुस्तकालय प्रयोग किया जाता है:

#here we have to include hoover library with worker. 
hoover_dir = os.path.dirname(hoover.__file__) 
shutil.copytree(hoover_dir, worker_dir + '/loggly') #copy it to worker directory 

हालांकि, मैं नहीं देख सकता कि आप कहां/कैसे निर्दिष्ट करते हैं कि कौन सा हूवर लाइब्रेरी संस्करण आप चाहते हैं, या इसे कहां से डाउनलोड करना है।

पायथन आयरनवर्क्सर्स में तीसरे पक्ष के पुस्तकालयों का उपयोग करने का आधिकारिक/सही तरीका क्या है?

उत्तर

6

[संपादित करें] हमने इस टूल को थोड़ा सा काम किया है क्योंकि यह उत्तर लिखा और स्वीकार किया गया था। answer from my colleague below अनुशंसित पाठ्यक्रम आगे बढ़ रहा है। [/ संपादित करें]

मैंने आयरनवर्कर के लिए पायथन क्लाइंट लाइब्रेरी लिखी। मैं Iron.io द्वारा भी नियोजित हूं।

यदि आप पाइथन क्लाइंट लाइब्रेरी का उपयोग कर रहे हैं, तो ऐसा करने का सबसे आसान (और अनुशंसित) तरीका केवल लाइब्रेरी के स्थापित फ़ोल्डर पर प्रतिलिपि बनाना है, और पैकेज अपलोड करते समय इसे शामिल करना है। पाइथन लॉगग्ली नमूना ऊपर क्या कर रहा है। जैसा कि आपने कहा था, यह एक संस्करण निर्दिष्ट नहीं करता है या पुस्तकालय को कहां से डाउनलोड करना है, क्योंकि इसकी परवाह नहीं है। यह सिर्फ आपके सिस्टम पर स्थापित होता है और इसका उपयोग करता है। जब भी आप अपनी स्थानीय मशीन पर "आयात बोटो" दर्ज करते हैं, तब भी जो भी हो, वह अपलोड किया जाएगा।

दूसरा विकल्प .worker file के साथ अपने कार्यकर्ता को अपलोड करने के लिए हमारे CLI का उपयोग कर रहा है। दूसरी पंक्ति है कि निर्भरता स्थापित करने के लिए चलाया जाएगा पिप आदेश है

runtime "binary" 
build 'pip install --install-option="--prefix=`pwd`/pips" boto' 
file 'botoworker.py' 
exec "botoworker.sh" 

कि:

एक botoworker.worker फ़ाइल बनाएँ:

ऐसा करने के लिए, यहाँ आप क्या करने की जरूरत होगी क्या । आप इसे संशोधित कर सकते हैं जैसे कि आप कमांड लाइन से किसी भी पीआईपी कमांड को चलाएंगे। यह "बिल्ड" चरण के दौरान कार्यकर्ता पर उस आदेश को निष्पादित करने जा रहा है, इसलिए जब भी आप कोई कार्य चलाते हैं तो इसे केवल एक बार निष्पादित किया जाता है।

तीसरी पंक्ति को उस पायथन फ़ाइल में बदला जाना चाहिए जिसे आप चलाना चाहते हैं - यह आपकी पायथन कार्यकर्ता फ़ाइल है। यहाँ एक हम इस परीक्षण के लिए किया गया है:

import boto 

आप को बचाने कि botoworker.py के रूप में, ऊपर किसी भी संशोधन के बिना काम करना चाहिए है। :)

चौथी पंक्ति एक शेल स्क्रिप्ट है जो वास्तव में आपके कार्यकर्ता को चलाने जा रही है। मैंने नीचे इस्तेमाल किया है। बस इसे botoworker.sh के रूप में सहेजें, और आपको उपरोक्त .worker फ़ाइल को संशोधित करने की चिंता करने की आवश्यकता नहीं होगी।अगर आप अपने अजगर फ़ाइल botoworker.py का नाम नहीं है, यह यहां भी बदलने के लिए याद रखें -

PYTHONPATH="$HOME/pips/lib/python2.7/site-packages:$PYTHONPATH" python botoworker.py "[email protected]" 

आप इसे अपने अजगर फ़ाइल को संदर्भित करता है पर ध्यान देंगे। यह सब आपके PYTHONPATH को स्थापित लाइब्रेरी को शामिल करने के लिए सेट करता है, और फिर आपकी पायथन फ़ाइल चलाता है।

इसे अपलोड करने के लिए, बस सुनिश्चित करें कि आपके पास सीएलआई स्थापित है (मणि लोहे_वर्कर_एनजी स्थापित करें, सुनिश्चित करें कि आपका रूबी संस्करण 1.9.3 या उच्चतम है) और फिर उसी निर्देशिका से, अपने खोल में "iron_worker अपलोड botoworker" चलाएं botoworker.worker फ़ाइल में है।

आशा है कि इससे मदद मिलती है!

+0

+1 यह लौह कार्यकर्ता दस्तावेज में होना चाहिए! –

+0

@ केविन सिम्पर हम इस पर काम कर रहे हैं। :) हमारी टीम तेजी से पुनरावृत्ति करती है, जो इसे जारी रखने के लिए हमारी प्रलेखन टीम (जो मेरी ज़िम्मेदारी है) के लिए मुश्किल बनाती है। हम कुछ सामानों पर काम कर रहे हैं जो आशा करते हैं कि यह बहुत बेहतर हो, हालांकि। – Paddy

+1

केविन - कोई ज़रूरत नहीं है। हमारे पास जल्द ही .worker में 'pip' कमांड समर्थन होगा। – iced

13

नए लोहे_वर्कर संस्करण में pip कमांड का मूल समर्थन है। तो, आपको इसकी आवश्यकता है:

runtime "python" 
exec "something.py" 

pip "boto" 
pip "someotherpip" 

full_remote_build true 
+2

यदि आप किसी विशिष्ट संस्करण को पिन करना चाहते हैं, तो ऐसा लगता है कि आपको कुछ ऐसा करने की आवश्यकता है: 'pip" boto "," == 2.9.2 "' –

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