2017-05-25 7 views
9

में जावास्क्रिप्ट निर्भरता मैं सॉफ्टवेयर लिख रहा हूं जो गणितीय पुस्तकों को वेबसाइटों के रूप में प्रकाशित करने की अनुमति देता है। यह ज्यादातर पायथन + फ्लास्क पर आधारित है, लेकिन समीकरणों से निपटने के लिए मैं MathJax का उपयोग कर रहा हूं। MathJax या तो क्लाइंट-साइड या सर्वर-साइड (MathJax-node के माध्यम से) का उपयोग किया जा सकता है। बाद के मामले में मुझे अपने मुख्य पायथन स्क्रिप्ट के लिए सुलभ किसी स्थान पर MathJax-node स्थापित करने के लिए npm का उपयोग करना होगा, फिर इसे स्क्रिप्ट से आमंत्रित करें। पूर्व मामले में, मुझे क्लाइंट के लिए उपलब्ध एक संपत्ति के रूप में MathJax.js प्रदान करना होगा (वर्तमान में मैं फ्लास्क के send_from_directory फ़ंक्शन का उपयोग करता हूं)।पायथन परियोजना

मेरा प्रश्न है: पाइथन में ऐसी विषम निर्भरताओं से निपटने का सबसे अच्छा अभ्यास क्या है? मेरा लक्ष्य इंस्टॉलेशन प्रक्रिया को कम से कम यूनिक्स-जैसी सिस्टम (लिनक्स या मैकोज़) पर जितना आसान हो सके, बशर्ते कि node और npm पहले से ही उपलब्ध हो।

मैं केवल अपने वितरण में आवश्यक सभी जावास्क्रिप्ट स्रोतों को रख सकता हूं, लेकिन शायद ऐसा करने का एक बेहतर तरीका है?

+0

softwareengineering.stackexchange.com अन्य प्रश्नों का जिक्र करते समय – WhiteHotLoveTiger

+0

@WhiteHotLoveTiger के लिए बेहतर फिट हो सकता है, यह अक्सर यह इंगित करने में सहायक होता है कि [क्रॉस-पोस्टिंग फेंक दिया गया है] (https://meta.stackexchange.com/ टैग/क्रॉस-पोस्टिंग/जानकारी) – gnat

+0

@gnat जानना अच्छा है। मुझे इस बारे में पता नहीं था। माइग्रेटिंग इस मामले में उपयुक्त माना जाएगा? – WhiteHotLoveTiger

उत्तर

3

मेरा प्रश्न है: ऐसे पायथन में विषम निर्भरताओं से निपटने का सबसे अच्छा अभ्यास क्या है?

नोड निर्भरता के मामले में, मैं निर्देशिका जो जरूरत नोड निर्भरता निर्दिष्ट करता है में एक package.json फ़ाइल होगी। अन्य भाषाओं/पैकेज प्रबंधकों के लिए, मैं निर्भरता निर्दिष्ट करने का पारंपरिक तरीका भी उपयोग करूंगा (उदा। रूबी निर्भरताओं के लिए एक जेमफाइल जोड़ें)।

पायथन/फ्लास्क के साथ आने वाला इसका एक और आम उदाहरण स्थिर फ्रंटेंड निर्भरताओं के लिए Bower पैकेज प्रबंधक का उपयोग कर रहा है। उस स्थिति में, निर्भरताओं को bower.json फ़ाइल में निर्दिष्ट किया गया है और आमतौर पर फ्लास्क की static निर्देशिका में एक बोवर फ़ोल्डर में खींचा जाता है।

मैं केवल अपने वितरण में अपने सभी जावास्क्रिप्ट स्रोतों को रख सकता हूं, लेकिन शायद ऐसा करने का एक बेहतर तरीका है?

एक बार जब आप निर्भरता निर्दिष्ट साथ package.json मिल गया है, तो आप लाने और सभी नोड npm install जो, मेरी राय में, इस परियोजना के साथ जावास्क्रिप्ट स्रोतों सहित तुलना में एक अधिक सुरुचिपूर्ण समाधान है चलाकर जरूरत निर्भरता स्थापित कर सकते हैं ।

अब जब कि तुम कई पैकेज प्रबंधकों मिल गया है (उदाहरण के लिए हो सकता है आप नोड निर्भरता के लिए npm के अलावा अजगर निर्भरता के लिए pip उपयोग कर रहे हैं), तो आपको एक Makefile या कुछ तैनाती/बनाने लाने के लिए स्क्रिप्ट का निर्माण करना चाहते हो सकता है/उन सभी का उपयोग करके इंस्टॉल करें (उदाहरण के लिए, यदि मैं ट्रेविस सीआई का उपयोग कर रहा था, तो के अलावा npm install पर कॉल करने के लिए मैं अपना .travis.yml अपडेट करूंगा)।

+0

धन्यवाद! कुछ प्रश्न: 1. यदि मैं' npm install' का उपयोग कर रहा हूं आवश्यक नोड पैकेज (जैसे MathJax-node) स्थापित करें, पाइथन स्क्रिप्ट को स्थापित संकुल के स्थान के बारे में जागरूक करना संभव है? 2. क्या मैं सही हूं कि इस नोड निर्भरताओं से निपटना असंभव है यदि मैं अपने पैकेज को इंस्टॉल करने योग्य बनाना चाहता हूं केवल 'पाइप इंस्टॉल ' के साथ? (यानी 'setup.py' से 'npm install' को आमंत्रित करना असंभव है?) –

1

Node.js package.json का उपयोग जावास्क्रिप्ट निर्भरताओं से निपटने के लिए सबसे इष्टतम समाधान होगा। .py से निष्पादन योग्य निष्पादित करने के लिए आप इस उत्तर Running shell command from Python and capturing the output का संदर्भ दे सकते हैं। नोड निर्भरता डिफ़ॉल्ट रूप से ./node_modules के अंदर उसी निर्देशिका में होती है जो आपके package.json फ़ाइल के स्थान के रूप में होती है।

स्थापित करने के लिए नए निर्भरता के लिए:

npm install --save npm-package-you-want-to-install 

एक बार जब आप उन्हें इस आदेश सब कुछ आप के लिए स्थापित किया है जाएगा तैयार है:

npm install 

नोड निर्भरता निश्चित रूप से जावास्क्रिप्ट के बाद से चीजों के साथ निपटने का और अधिक सुरुचिपूर्ण तरीका है एक सतत विकसित दुनिया है और स्क्रिप्ट टैग/फ़ंक्शंस की तुलना में पैकेज.जेसन पर एक नज़र डालना बहुत आसान है जो स्क्रिप्ट्स को आसानी से बुलाता है। यदि आप एक स्वचालित प्रणाली चाहते हैं तो मेरा सुझाव निष्पादन योग्य (.sh) बनाना होगा जो दोनों के लिए किश्त चलाएगा और आप इसे अपनी भविष्य की परियोजनाओं में उपयोग कर सकते हैं।

+0

धन्यवाद! कुछ प्रश्न: 1. यदि मैं' npm का उपयोग कर रहा हूं आवश्यक नोड पैकेज (जैसे MathJax-node) स्थापित करने के लिए 'इंस्टॉल करें', स्थापित पैकेजों के स्थान के बारे में पाइथन स्क्रिप्ट को कैसे जानना संभव है? 2. क्या मैं सही हूं कि इस नोड निर्भरताओं से निपटना असंभव है यदि मैं अपना पैकेज चाहता हूं केवल 'पाइप इंस्टॉल ' के साथ स्थापित करने योग्य होने के लिए? (i .e 'setup.py' से 'npm install' को आमंत्रित करना असंभव है?) –

+0

node_modules आमतौर पर package.json के समान फ़ोल्डर में होते हैं। तो मामले में पैकेज.जेसन आपकी परियोजना की जड़ में है, node_modules भी होगा। पाई स्क्रिप्ट्स (एनपीएम इंस्टॉल) के लिए ऊपर टिप्पणी में एक लिंक है। – kochai

+0

हाँ, मैं समझता हूं कि पायथन से 'npm इंस्टॉल 'कैसे शुरू करें। मैं जो पूछ रहा हूं वह निम्नलिखित है। 'setup.py' मूल रूप से' setuptools.setup' फ़ंक्शन का एक आविष्कार है जो स्वचालित रूप से पैकेज स्थापित करने के लिए सही स्थान पायेगा। हालांकि, मैं निष्पादित नहीं कर सकता (कम से कम नहीं जानता कि कैसे) कैसे मनमाने ढंग से पायथन आदेश निष्पादित करें (जैसे 'subprocess.run ([" npm "," install "]) 'निर्देशिका में जहां मेरी स्क्रिप्ट' setuptools.setup द्वारा रखी जाती हैं 'यही कारण है कि मैं समझ नहीं पा रहा हूं कि मेरी पायथन स्क्रिप्ट्स (स्थापित होने के बाद) जावास्क्रिप्ट निर्भरताओं के स्थान से अवगत हो सकती है। –

2

मैं वेबपैक Webpack.js बोवरज का उपयोग करने की अनुशंसा करता हूं। एनपीएम और उसका पैकेज.जेसन निर्भरता अद्यतनों के लिए बहुत अच्छे हैं लेकिन नोड_मोड्यूल से पुस्तकालयों का संदर्भ देना थोड़ा शर्मनाक है।

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