Tuesday, 15 June 2010

python - Artifactory PyPi repo layout with build promotion -


Q1: मेरे पास कृत्रिम पीपीआई सक्षम रेपो है my-pypi-repo जहां मैं अपने पैकेज प्रकाशित कर सकता हूं। अजगर setup.py -sdist के माध्यम से अपलोड करते समय, मुझे इस तरह एक संरचना मिलती है:

  my-pypi-repo | | My_package | | X.y.z | | My_package-xyztar.gz  

समस्या यह है कि यह संरचना कृत्रिम अंग में किसी भी "अनुमत" रेपो लेआउट से मेल नहीं खायेगा, क्योंकि [org] या [Orgpath] अनिवार्य हैं:

पैटर्न [मॉड्यूल] / [बेसआरव] / [मॉड्यूल] - [बेसआरव]। [Ext] 'कम-से-कम टोकन को शामिल करना चाहिए' मॉड्यूल ',' बेसरिव 'और' ऑर्ग 'या' ऑर्गपाथ '।

मैंने पैकेज कोड को' हैकिंग 'के द्वारा पथ को प्रकाशित करने में कामयाब होकर myorg / my_package , लेकिन बाद में पीप इसे नहीं मिल सकता है, इसलिए यह बहुत ही सुंदर है।

Q2: ने किसी को भी "सीआई-रिपो" और "रिलीज़-रेपो" का उपयोग करके पायथन के लिए प्रचार Artifactory?

मैं क्या हासिल करना चाहूंगा:

सीआई रिपो: my_package-1.2.3 + build90.tar.gz जब इस आर्टिफैक्ट को बढ़ावा मिलेगा मेटाडाटा को हटा दिया जाएगा

रेपो जारी करता है: my_package-1.2.3.tar.gz

मैं कर सकता हूँ रेपो लेआउट्स के माध्यम से इसे हासिल करना (मैं क्यू 1 को हल करता हूं)। समस्या यह है कि "एम्बेडेड" संस्करण को मेरे पायथन स्क्रिप्ट के अंदर से कैसे निपटना है, setup.py में हार्डकोड किया गया है।

मैं अपने पहले प्रश्न / समस्या के संबंध में एक ही मुद्दे पर चल रहा हूं। जब मेरे सिस्टम को पिप के जरिए कृत्रिम रूप से प्रकाशित करने के लिए विन्यस्त किया जाता है, तो यह आपके द्वारा वर्णित प्रारूप का उपयोग करता है।

जैसा कि आपने उल्लेख किया है, [org] या [orgpath] अनिवार्य है और यह मूल रूप से सभी नवीनतम एपीआई कार्यक्षमता को तोड़ता है, जैसे नवीनतम संस्करण के लिए खोज आदि। मैं इसे वर्तमान में मेरे आर्टिफैक्ट पथ पैटर्न के रूप में प्रयोग कर रहा हूं:

  [org] / [module] /[baseRev]। ([fileItegRev])/[module]-[baseRev].([fileItegRev])। [अगला]  

समस्या यह है कि पीआईपी अवधारणा को समझ नहीं पा रही है इस मामले में [org] मैं अस्थायी रूप से एक अजगर स्क्रिप्ट का प्रयोग कर रहा हूं, जिससे मेरे पैकेज को कृतिरोधी पर प्रकाशित किया जा सके। उम्मीद है कि यह कुछ ऐसा है जिसे जेएफओआरजी टीम द्वारा संबोधित किया जा सकता है।

अजगर लिपि केवल मेरे स्थानीय पपी रिपॉजिटरी को प्रकाशित करने के लिए Artifactory के REST एपीआई का उपयोग करता है, कुछ गुणों पर हमला करता है ताकि कुछ एएपीटी एपीआई कार्यों में काम किया जा सके ठीक है, जैसे।

मुझे उस कॉल का उपयोग करने में सक्षम होने की आवश्यकता है क्योंकि हम शेफ में घर का उपयोग कर रहे हैं और हम नवीनतम संस्करण प्राप्त करने के लिए उस पद्धति का उपयोग करते हैं। pypi.version संपत्ति जो कि python setup.py sdist अपलोड -आर स्थानीय के माध्यम से प्रकाशित करते समय जोड़ा जाता है REST एपीआई के साथ काम नहीं करता है इसलिए मुझे मैन्युअल रूप से < कोड> संस्करण संपत्ति। ईमानदारी से दर्दनाक होने के कारण हम सेटअप के साथ अपलोड विकल्प का उपयोग करते समय गुणों को नहीं जोड़ सकते। आदर्श रूप से मैं पीआईपी के माध्यम से सब कुछ करने में सक्षम होना चाहता हूं, लेकिन फिलहाल यह संभव नहीं है।

मैं पैकेज और अपलोड पद्धति का उपयोग कर रहा हूँ जो Artifactory दस्तावेज़ीकरण में है। यहाँ वह फ़ंक्शन है जिसका उपयोग मैं कुछ गुणों को प्रकाशित करने के लिए उपयोग कर रहा हूं (यदि आप की आवश्यकता है तो अधिक जोड़ने के लिए स्वतंत्र महसूस करें):

  def _publish_artifact (name, version, path, summary): base_url = Http: // server: 8081 / artifactory / {0} '.format (PYPI_REPOSITORY) गुण ='; संस्करण = {0}; pypi.name = {1}; pypi.version = {0}; pypi.summary = { 2} '\ .format (संस्करण, नाम, सार) url_path =' /Company/{0}/{1}/{0}-{1}.zip'format (नाम, संस्करण) url = '{0} {1} {2} '। प्रारूप (base_url, गुण, url_path) dist_file = r' {0} \ dist \ {1} - {2} .zip.format (पथ, नाम, संस्करण) फ़ाइलें = {'upload_file ': खुला (dist_file,' rb ')} s = अनुरोध। सत्र () s.auth = (' उपयोगकर्ता नाम ',' पासवर्ड ') उत्तर = s.put (url, files = files) logger.info (' HTTP उत्तर : {0} '। प्रारूप (उत्तर))  

No comments:

Post a Comment