मैं bash
अपने खोल के रूप में उपयोग कर MacOSX पर हूँ । मेरे पास प्रतीकात्मक लिंक है, इस तरह बनाया गया है:
ln -s /usr/bin/python python2
मेरे पास एक पैकेज है जो python2 का उपयोग करता है और मैं अपनी वर्तमान कार्य निर्देशिका में एक प्रतीक लिंक बनाना चाहता हूं /usr/bin/python
जो वास्तव में python2 है। जब मैं python2
कमांड लाइन से करता हूं तो मुझे यह त्रुटि मिलती है:
python2: realpath couldn't resolve "/usr/bin/python2"
लेकिन इसे इस तरह से लागू करना ./python2
सही ढंग से पथ को हल करता है। मेरा PATH
इसमें .
है। वास्तव में मैंने इसे संशोधित किया है, परीक्षण के लिए, केवल .
इसमें है।
मैं इसका कैसे समाधान करूं? धन्यवाद!
प्रसंग
नीचे दिए गए समाधानों की एक संख्या मेरे लिए काम नहीं करेगी। मैंने अपने प्रश्न को यथासंभव ध्यान केंद्रित करने और संक्षिप्त करने की कोशिश की ताकि लोग पाठ के समुद्र में न डूबें, लेकिन स्पष्ट रूप से मुझे अधिक पृष्ठभूमि प्रदान करने की आवश्यकता है।
मैं एक पैकेज पर विकसित करने की कोशिश कर रहा हूं जिसे मैंने गिट से क्लोन किया है। मूल पैकेज, git-multimail
लिनक्स के कुछ प्रकार पर विकसित किया गया है / है (मैं उबंटू का अनुमान लगा रहा हूं)। मैं इसे संशोधित करने की कोशिश कर रहा हूं कि इसका और MacOSX पर इसके परीक्षण सूट का उपयोग करने में सक्षम हो सके। यहाँ कुछ प्रस्तावित समाधान आदर्श क्यों नहीं हैं:
रूट के रूप में,
python2
/ usr / bin / में एक सिमलिंक बनाएँ । मैं एक ऐसे समाधान की तलाश कर रहा हूं जिसके लिए इसकी आवश्यकता नहीं होगी। यह शुरुआत में एक स्पष्ट विकल्प था, लेकिन मैं एक ऐसा समाधान चाहूंगा जो मेजबान प्रणाली को यथासंभव कम संशोधित करे। यही कारण है कि मैं वर्तमान वर्किंग डायरेक्टरी में एक अस्थायी सिमलिंक बनाना चाहता था, CWD (यानी.
) को मेरे पथ में जोड़ें, और तब समाप्त होने पर इसे नष्ट कर दें (यानी सिमलिंक)।मौजूदा अजगर के साथ अजगर स्क्रिप्ट को कॉल करने के लिए एक आवरण स्क्रिप्ट बनाएं। इसके साथ समस्या यह है कि सही निष्पादन वातावरण खोजने के लिए शेब पर निर्भर परीक्षण सूट के अधिकांश वास्तविक स्क्रिप्ट_ निष्पादन योग्य के रूप में उपयोग करता है। इसका मतलब होगा कि परीक्षण सूट का संपादन काफी हद तक। इस संदर्भ में, (परीक्षण-रूपरेखा के एक स्निपेट के लिए नीचे देखें), मुझे हर
.py
फ़ाइल के लिए एक आवरण जोड़ना होगा ; इसके अलावा उपयोगकर्ता / डेवलपर को पैकेज के उपयोग के लिए अलग-अलग नियमों के बारे में पता होना चाहिए कि वे किस प्रणाली पर हैं (यानी MacOSX पर सुनिश्चित करें कि आप रैपर फ़ाइलों को रैपर या स्पष्ट रूप से कॉल करने के बिना उपयोग नहीं करते हैं/usr/bin/python file.py
)।#! /bin/sh D=$(cd $(dirname "$0") && pwd) MULTIMAIL="$D/../git-multimail/git_multimail.py" POST_RECEIVE="$D/../git-multimail/post-receive" TESTREPO=$("$D/create-test-repo") HOME="$D" XDG_CONFIG_HOME="$D" GIT_CONFIG_NOSYSTEM=1 export HOME XDG_CONFIG_HOME GIT_CONFIG_NOSYSTEM cd $TESTREPO test_email() { REFNAME="$1" OLDREV="$2" NEWREV="$3" echo "$OLDREV" "$NEWREV" "$REFNAME" | USER=pushuser "$MULTIMAIL" }
सभी
python2
संदर्भों को बदलनाpython
। README यह सुझाव देता है, लेकिन यह प्रभावी रूप से संस्करण नियंत्रण को बेकार बनाता है क्योंकि सिस्टम परिवर्तन को नए संस्करण के रूप में देखता है, जब वास्तव में यह (शब्दार्थ) नहीं है।
मैं (3) का उपयोग कर रहा हूं, लेकिन मैं एक बेहतर समाधान खोजने की कोशिश कर रहा हूं। मैं यह स्वीकार करने को तैयार हूं कि यह सिर्फ चीजें हैं (यानी 'python2' को इंगित करने का उपयुक्त तरीका नहीं है /usr/bin/python
कि परीक्षण सूट और वास्तविक ढांचे में बहुत सारे बदलावों के बिना पोर्टेबल और विनीत है)।
git-multimail.py
यह है #!/usr/bin/env python2
, इसलिए वहाँ एक (अपेक्षाकृत) सीधा तरीका यह है है।
ln -s /usr/bin/python2.7 /usr/local/bin/python2
भी
ln -s /usr/bin/python /usr/bin/python2