2014-08-27 8 views
6

से वर्तमान निर्देशिका को कैसे निकालें I hg के Mercurial भंडार के साथ काम करना चाहता हूं। यही है, मैंने Mercurial को https://www.mercurial-scm.org/repo/hg से क्लोन किया और क्लोन रिपोजिटरी के अंदर कुछ hg आदेशों को चलाने के लिए चाहते हैं। समस्या यह है कि इस क्लोन के अंदर hg चलाते समय hg निष्पादन योग्य इस निर्देशिका से अपने पायथन मॉड्यूल को लोड करने का प्रयास करता है और /usr/lib/pythonVERSION आदि से नहीं। जैसा कि मुझे लगता है कि ऐसा होता है क्योंकि पाइथन आयात पथ sys.path में पहली प्रविष्टि के रूप में एक खाली स्ट्रिंग होती है जिसका अर्थ है "वर्तमान निर्देशिका"। PYTHONPATH पर्यावरण चर सेट नहीं है।पाइथन आयात पथ

खोज यह है कि मैं अपने स्थापित hg को "गलत" मॉड्यूल आयात करने से कैसे रोक सकता हूं।

+0

'sys.path.insert (0,"/usr/lib/pythonVERSION ")'? –

+0

मुझे इसे कहां रखना चाहिए? मैं सिस्टम 'एचजी' स्क्रिप्ट को संशोधित नहीं करना चाहता हूं। – ragol

उत्तर

0

@ragol, मुझे लगता है कि पैड्राइक का सही समाधान है। पाइथन स्क्रिप्ट के भीतर जो आप एचजी कमांड चलाने की कोशिश कर रहे हैं, आपको निम्न कमांड को शामिल करने की आवश्यकता है: sys.path.insert(0,"/usr/lib/pythonVERSION")

अपनी पायथन स्क्रिप्ट की शुरुआत में कमांड को रखें। आदेश मॉड्यूल आयात करते समय पहले /usr/lib/pythonVERSION निर्देशिका में देखने के लिए पाइथन को बताता है।

यदि यह काम नहीं करता है, तो आपको पथ के साथ और अधिक विशिष्ट होने की आवश्यकता हो सकती है। sys.path.insert(0,"/usr/lib/pythonVERSION/site-packages/hg")

+1

मैं जिस स्क्रिप्ट को चलाने की कोशिश करता हूं वह है '/ usr/bin/hg' जो कि खुद ही mercurial है। हो सकता है कि मैं आपको सही ढंग से समझ नहीं पा रहा हूं, लेकिन ऐसा लगता है कि आप इसे संशोधित करने का सुझाव देते हैं। यह निश्चित रूप से सबसे सरल समाधान है, लेकिन इसका मतलब यह होगा कि मैं पैकेज प्रबंधक द्वारा स्थापित एक फ़ाइल को संशोधित करता हूं। मुझे यह विचार पसंद नहीं है। मैं एक बाहरी स्क्रिप्ट लिखूंगा जो '/ usr/bin/hg' को इस तरह से कॉल करता है कि यह वर्तमान निर्देशिका से मॉड्यूल लोड नहीं करता है। – ragol

+0

आप जिस स्क्रिप्ट का चल रहे हैं उसका नाम क्या है? क्या इसमें .py एक्सटेंशन है? मुझे लगता है कि आपने या तो कुछ पायथन लिपि बनाई है या संपादित की है और Mercurial नामक एक मॉड्यूल आयात करने की कोशिश कर रहे हैं। मैं सुझाव दे रहा हूं कि sys.path.insert कमांड को उस लाइन से पहले शामिल करें जहां आप Mercurial मॉड्यूल – rolb

+1

@rolb आयात करने का प्रयास करते हैं, उसे आपको कितनी बार बताना है? वह एक निष्पादन योग्य के रूप में '/ usr/bin/hg' चला रहा है। यह एक वास्तविक निष्पादन योग्य हो सकता है, यह एक शेबांग के साथ एक स्क्रिप्ट हो सकती है। इसमें कोई एक्सटेंशन नहीं है, उन्हें यूनिक्स में आवश्यक नहीं है। –

1

तरह से मैं विषय के साथ सौदा होगा निम्नलिखित सामग्री के साथ एक /usr/local/bin/hg श स्क्रिप्ट बनाने के द्वारा होता है: उदाहरण के लिए, अगर मॉड्यूल आयात करने के लिए कोशिश कर रहे हैं /usr/lib/pythonVERSION/site-packages/hg निर्देशिका में स्थित है, तो आप निम्न आदेश का उपयोग कर सकते हैं:

#!/bin/sh 
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg 

PYTHONPATH एक विशेष वातावरण चर अजगर दुभाषिया द्वारा सम्मानित अतिरिक्त मॉड्यूल आयात पथ प्राप्त करने के लिए है (Ubuntu आधारित distributives dist-packages बजाय site-packages उपयोग करें)।

वैकल्पिक रूप से, आप अपने खोल में PYTHONPATH निर्यात कर सकते हैं, लेकिन यह आपके पूरे अनुभव को प्रभावित करेगा।

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