python - मैं Google App Engine के साथ तृतीय-पक्ष पायथन पुस्तकालयों का प्रबंधन कैसे करूं?(virtualenv? पीआईपी?)




google-app-engine deployment (4)

नोट: यह उत्तर Google App Engine पर फ्लास्क के लिए विशिष्ट है।

ऐप इंजन पर काम करने के लिए फ्लास्क एक्सटेंशन कैसे प्राप्त करें के उदाहरण के लिए फ्लास्क-एपेंगिन-टेम्पलेट प्रोजेक्ट देखें। https://github.com/kamalgill/flask-appengine-template

विस्तार को नेमस्पेस पैकेज फ़ोल्डर में src / packages / flaskext पर ड्रॉप करें और आप सभी सेट हैं। https://github.com/kamalgill/flask-appengine-template/tree/master/src/lib/flaskext

गैर-फ्लास्क पैकेज को src / packages फ़ोल्डर में ज़िप फ़ाइलों, अंडों, या अनजिप किए गए पैकेज के रूप में छोड़ा जा सकता है, क्योंकि प्रोजेक्ट टेम्पलेट में ऊपर पोस्ट sys.path.insert () स्निपेट शामिल है।

Google App Engine के साथ तृतीय-पक्ष पायथन पुस्तकालयों के प्रबंधन के लिए सबसे अच्छी रणनीति क्या है?

मान लें कि मैं फ्लास्क, एक वेबपैप फ्रेमवर्क का उपयोग करना चाहता हूं। एक ब्लॉग एंट्री ऐसा करने के लिए कहती है, जो सही नहीं लगती है:

$ cd /tmp/
$ wget http://pypi.python.org/packages/source/F/Flask/Flask-0.6.1.tar.gz
$ tar zxf Flask-0.6.1.tar.gz
$ cp -r Flask-0.6.1/flask ~/path/to/project/
(... repeat for other packages ...)

तीसरे पक्ष के कोड को प्रबंधित करने का एक बेहतर तरीका होना चाहिए, खासकर यदि मैं संस्करणों को ट्रैक करना चाहता हूं, अपग्रेड का परीक्षण करना चाहता हूं या यदि दो पुस्तकालय उपनिर्देशिका साझा करते हैं। मुझे पता है कि पायथन ज़िप्फाइल से मॉड्यूल आयात कर सकता है और वह पीपी एक अद्भुत आवश्यकता फाइल के साथ काम कर सकती है, और मैंने देखा है कि पीएपी के पास जीएई के साथ उपयोग के लिए एक zip कमांड है।

(नोट: कुछ समान प्रश्न हैं - 1 , 2 , 3 , 4 , 5 - लेकिन वे केस-विशिष्ट हैं और वास्तव में मेरे प्रश्न का उत्तर नहीं देते हैं।)


बस के बारे में क्या:

$ pip install -r requirements.txt -t <your_app_directory/lib>

<your_app_directory>/appengine_config.py बनाएं / संपादित करें:

"""This file is loaded when starting a new application instance."""
import sys
import os.path

# add `lib` subdirectory to `sys.path`, so our `main` module can load
# third-party libraries.
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib'))

अद्यतन करें:

Google ने अपना नमूना appengine_config.py अपडेट किया, जैसे:

    from google.appengine.ext import vendor
    vendor.add('lib')

नोट: भले ही उनके उदाहरण में .gitignore lib/ निर्देशिका को अनदेखा कर दिया .gitignore हो, फिर भी आपको उस निर्देशिका को स्रोत नियंत्रण में रखने की आवश्यकता है यदि आप git-push परिनियोजन विधि का उपयोग करते हैं।


मैंने हाल ही में इस नाम के लिए एक उपकरण बनाया है। यह एक info.txt प्रारूप का पालन करता है, लेकिन इसे इंस्टॉल नहीं करता है, आप पाइप install -r requirements.txt के साथ स्थापित कर सकते हैं, फिर कमांड लाइन टूल genv चलाएं।

$ pip install -r requirements.txt
$ gaenv

यह स्वचालित रूप से सिम्लिंक बनाता है, आप अपने वर्चुअलएव में भी genv इंस्टॉल कर सकते हैं और वहां से बाइनरी चला सकते हैं। यहां इसके बारे में एक ब्लॉग पोस्ट है:

http://blog.altlimit.com/2013/06/google-app-engine-virtualenv-tool-that.html

गीथूब पर भी

https://github.com/faisalraja/gaenv


यहां बताया गया है कि मैं इसे कैसे करता हूं:

  • परियोजना
    • .Python
    • बिन
    • lib
      • python2.5
        • साइट-संकुल
          • <पीआईपी यहां संकुल अधिष्ठापन>
    • शामिल
    • src
      • app.yaml
      • index.yaml
      • main.yaml
      • <pip स्थापित संकुल को symlink ../lib/python2.5/site-packages में

project निर्देशिका शीर्ष स्तर की निर्देशिका है जहां वर्चुअलएन्व बैठता है। मुझे निम्न आदेशों का उपयोग करके वर्चुअलएन्व मिलता है:

cd project
virtualenv -p /usr/bin/python2.5 --no-site-packages --distribute .

src निर्देशिका वह जगह है जहां आपका सभी कोड जाता है। जब आप GAE पर अपना कोड तैनात करते हैं, * केवल * src निर्देशिका में उनको तैनात करें और कुछ भी नहीं। appcfg.py symlinks को हल करेगा और लाइब्रेरी फ़ाइलों को आपके लिए GAE पर कॉपी करेगा।

अगर मैं स्रोत कोड को पढ़ने की ज़रूरत है, तो मैं मुख्य रूप से सुविधा के लिए ज़िप फ़ाइलों के रूप में अपने पुस्तकालयों को स्थापित नहीं करता हूं, जो मुझे जिज्ञासा से बहुत कुछ करने के लिए होता है। हालांकि, यदि आप वास्तव में पुस्तकालयों को ज़िप करना चाहते हैं, तो निम्न कोड स्निपेट को अपने main.py में रखें

import sys
for p in ['librarie.zip', 'package.egg'...]:
    sys.path.insert(0, p)

इसके बाद आप सामान्य रूप से अपने ज़िप किए गए पैकेज आयात कर सकते हैं।

Setuptools ' pkg_resources.py लिए बाहर देखने के लिए एक बात है। मैंने सीधे अपनी src निर्देशिका में कॉपी किया है, इसलिए मेरे अन्य सिम्लिंक किए गए पैकेज इसका उपयोग कर सकते हैं। entry_point का उपयोग करने वाली किसी भी चीज के लिए देखें। मेरे मामले में मैं Toscawidgets2 का उपयोग कर रहा हूं और मुझे मैन्युअल रूप से टुकड़ों को तारने के लिए स्रोत कोड में खोदना पड़ा। यदि आपके पास बहुत सारी लाइब्रेरीज़ हैं जो entry_point पर भरोसा करते हैं तो यह परेशान हो सकता है।





egg