2009-12-14 8 views
6

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

मेरी समस्या यह है कि अब मैं easy_install (या अन्यथा) का उपयोग कर अंडे स्थापित करना चाहता हूं जो मंच-निर्भर है। easy_install इंस्टॉल के प्लेटफॉर्म-स्वतंत्र भाग की साइट-पैकेज निर्देशिका में अंडे डालता है। अंडे के नाम में इसका मंच है इसलिए कोई संघर्ष नहीं होना चाहिए। लेकिन पाइथन केवल वह पहला लोड करेगा जो इसे पाता है। (इसलिए, सोलारिस पर यह लिनक्स अंडे को लोड करने का प्रयास कर सकता है)। आसान-स्थापित.pth फ़ाइल को संशोधित करने से वह कौन सा पता लगा सकता है, लेकिन यह बहुत बेकार है।

मैं .egg फ़ाइलों को प्लेटफॉर्म-निर्भर पैकेज निर्देशिका में स्थानांतरित कर सकता हूं और फिर उन्हें लोड करने के लिए pkg_resources.require() का उपयोग कर सकता हूं (या पथ को मैन्युअल रूप से समायोजित कर सकता हूं)। लेकिन ऐसा लगता है कि प्लेटफॉर्म अंडे के नाम पर होने के बाद से मुझे नहीं करना चाहिए।

क्या कोई और सामान्य तरीका है जिससे मैं यह सुनिश्चित कर सकूं कि पाइथन सही प्लेटफॉर्म के लिए अंडे लोड करेगा?

+0

क्या अंडे में सी एक्सटेंशन होते हैं, या यह शुद्ध पायथन है? – codeape

+0

हाँ, एक सी एक्सटेंशन है। अन्यथा इससे कोई फर्क नहीं पड़ता क्योंकि कोड मंच-निर्भर नहीं होगा। विशेष रूप से, यदि आप उत्सुक हैं, तो यह PyPerforce मॉड्यूल है। – Philbert

उत्तर

2

जो मैं समाप्त कर रहा था वह मंच-निर्भर साइट पर पैकेज-विशिष्ट साइट-पैकेज निर्देशिका (मैन्युअल रूप से http://docs.python.org/install/index.html पर निर्दिष्ट) पर जा रहा था। तब मैंने उसी निर्देशिका में एक और आसान-स्थापित.pth बनाया, अंडे को स्थापित करने के लिए सूचीबद्ध किया।

यह आसान होगा अगर easy_install exec_prefix का सम्मान करने के लिए और सही "गैर-शुद्ध मॉड्यूल वितरण" स्थान पर प्लेटफ़ॉर्म-निर्भर अंडे डालें। शायद मैं इसे easy_install लोगों से अनुरोध करूंगा।

1

अजगर यह संभव बनाने के लिए पर्याप्त हुक है, लेकिन यह शायद समझदारी नहीं है। आप वास्तव में इस लागू करने के लिए चाहते हैं, PEP 302 को देखो और easy_install या distribute स्रोत कोड पर हैकिंग शुरू करते हैं। जैसा कि आप जानते हैं, easy-install.pth में वास्तव में कोई तर्क नहीं है।

शायद आप जो पाइथन पैकेज स्थापित करना चाहते हैं, उसे ट्रैक रखने के लिए शायद आप बेहतर होंगे। उदाहरण के लिए आप अपना खुद का पायथन पैकेज लिख सकते हैं जो वांछित सेट पर निर्भर करता है।

+0

और/या उस प्रोजेक्ट के लिए अपने पैकेज को प्रबंधित करने के लिए पायथन वर्चुअलएन्ग पैकेज का उपयोग करें – RyanWilcox

2

वर्चुअलएनवी आज़माएं ... http://pypi.python.org/pypi/virtualenv ... आपको अपने स्वयं के पायथन दुभाषिया + site_packages फ़ोल्डर के साथ अलग वातावरण बनाने में मदद करता है। इस प्रकार आप स्थानीय पथ में स्थापित संकुल के साथ कभी भी कोई संघर्ष नहीं करते हैं।

0

सभी प्लेटफ़ॉर्म-विशिष्ट संकुल को स्थापित करने के लिए "easy_install -m" का उपयोग करें, ताकि sys.path पर कोई डिफ़ॉल्ट संस्करण न हो। इस तरह, संस्करण संकल्प रनटाइम पर होता है, और प्लेटफ़ॉर्म जानकारी को ध्यान में रखा जाएगा।

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