के तहत एक छोटे पायथन प्रोग्राम (मॉड्यूल नहीं) के लिए उचित स्थापना स्क्रिप्ट मेरे पास पाइथन में एक छोटा प्रोग्राम है जिसमें एक .py फ़ाइल और प्रोग्राम द्वारा उपयोग की जाने वाली डेटा फ़ाइलों की निर्देशिका शामिल है।लिनक्स
मैं लिनक्स पर व्यवस्थापक अधिकार वाले उपयोगकर्ता के लिए एक इंस्टॉलेशन प्रक्रिया बनाने का उचित तरीका जानना चाहता हूं ताकि वह प्रोग्राम को अपने सिस्टम पर इंस्टॉल कर सके और विकल्प और पैरामीटर के साथ कमांड लाइन से इसका उपयोग कर सके। संपादित करें: जिस हिस्से में मुझे परेशानी हो रही है, वह प्रोग्राम है, एक बार स्थापित हो, डेटा फ़ाइलों को पुनर्प्राप्त करें, जो 'डेटा' उप-फ़ोल्डर में निहित है।
एक सेटअप स्क्रिप्ट जो निष्पादन योग्य प्रोग्राम फ़ाइल /usr/local/bin
में स्थापित करती है और /usr/share/my_program/data
में डेटा फ़ोल्डर स्वीकार्य समाधान हो सकता है? की तरह कुछ:
#!/bin/bash
# Launch with sudo
chmod +x program.py
cp program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation complete
अब, ऐसा करने के लिए में, मुझे लगता है, इस कार्यक्रम में, है कि डेटा फ़ाइलों /usr/share/my_program/data
में होने जा रहे हैं। लेकिन मैं उपयोगकर्ता को इसे इंस्टॉल किए बिना प्रोग्राम का उपयोग करने का विकल्प भी छोड़ दूंगा। तो मुझे यह मानना होगा कि डेटा निष्पादन योग्य प्रोग्राम फ़ाइल के सापेक्ष './data' में है। मुझे इस समस्या को कैसे हल करना चाहिए? मैं कुछ तरीकों से सोच सकता हूं, लेकिन मेरी भावना यह है कि मैं एक गड़बड़ी कर रहा हूं जहां एक स्पष्ट और सही उत्तर होना चाहिए।
वर्तमान में, मैं खंड को छोड़कर एक कोशिश का उपयोग कर पर विचार कर रहा हूँ:
try:
find data from /usr/share/my_program && set path accordingly
except:
set path to the data as './data'
फिर से, मुझे लगता है कि यह थोड़ा जटिल है। आप स्थापना के लिए कैसे आगे बढ़ेंगे?
बहुत धन्यवाद
संपादित करें: समाधान अपनाया
इस सवाल का जवाब के आधार पर, और सवाल FakeRainBrigand (How to know the path of the running script in Python?) ने सुझाव दिया में उन लोगों के लिए, मैं एक स्क्रिप्ट स्थापित बनाया है कि इस तरह जाता है:
#!/bin/bash
mkdir /usr/share/my_program
chmod +x my_program.py
cp my_program.py /usr/local/bin
cp -r data /usr/share/my_program
echo Installation completed
और मेरे प्रोग्राम में निम्न कोड जोड़ा गया:
if os.path.dirname(__file__) == "/usr/local/bin":
DATA_PATH = "/usr/share/my_program/data"
elif os.path.dirname(__file__) == ".":
DATA_PATH = "./data"
else:
print "You do not have a working installation of my_program"
print "See the installation procedure in the README file"
sys.exit(1)
मैं तो os.path.join(DATA_PATH, "file-to-reach.txt")
का उपयोग करें ताकि कार्यक्रम यह डेटा, /usr/share/my_program
के नीचे पाया पहुँच सकते हैं।
यदि अधिक स्वीकार्य विधि उपलब्ध है तो मुझे टिप्पणियां खुशी होगी।
चीयर्स
'मेक' सिर्फ सी से कहीं अधिक है, लेकिन पाइथन प्रोग्राम में जगह से बाहर हो सकता है। – sarnold