मान लें कि आपके पास निंजा नामक एक बड़ी (पायथन) सॉफ्टवेयर प्रोजेक्ट है। प्रोजेक्ट के कई हिस्सों जैसे सर्वर और क्लाइंट, लेकिन एक सामान्य आधारभूत संरचना लाइब्रेरी भी है, जिसमें सामान्य वर्ग और उपकरण शामिल हैं। स्वाभाविक रूप से मैं इस तरह एक पैकेज संरचना बनाने होगा: ninja.core
, ninja.server
और ninja.client
, जहां दोनों सर्वर और किसी तरह से ग्राहक आयात ninja.core
। विकास प्रयोजनों के लिए कोर, सर्वर और ग्राहक विभिन्न परियोजनाओं में रखा जाता है (हम सबवर्सन साथ ग्रहण का उपयोग करें), इस प्रकार इस तरह एक फ़ोल्डर संरचना में जिसके परिणामस्वरूप:विभिन्न परियोजनाओं के पाइथन पुस्तकालय एक ही पैकेज में कैसे हो सकते हैं?
eclipse_workspace
|
>-Ninja_core
| |
| >-ninja
| |
| >-core
|
>-Ninja_client
| |
| >-ninja
| |
| >-client
.
.
.
एक जावा पृष्ठभूमि मैं ग्रहण करने के बाद यह संभव होगा, लेकिन यह निकला (पढ़ना: आयात त्रुटियां) कि यह काम नहीं करता है। के रूप में this answer में बताया, यह आम तौर पर करने के लिए संभव नहीं है ninja.core
और ninja.client
जब तक दोनों वे एक ही पैकेज ninja
, जो वे नहीं कर रहे हैं की सबपैकेज हैं।
दृष्टिकोण एक::
- एक भी ग्रहण/SVN परियोजना में पूरे कोड रखो और केवल एक ही पैकेज
ninja
है अनुसार सबपैकेज साथ इस को जन्म देता है।
उत्पादन परिवेश में हम कोर और सर्वर नहीं बल्कि ग्राहक या कोर और ग्राहक स्थापित करने के लिए सक्षम होना चाहते हैं लेकिन नहीं सर्वर। मुझे गलती हो सकती है, लेकिन जहां तक मैं पाइथन पैकेज को समझता हूं, यह दृष्टिकोण ए के साथ संभव नहीं होगा। परियोजनाओं को अलग लेकिन संगत रखना, यह ninja_core
, ninja_client
और ninja_server
नामों के साथ पैकेज का उपयोग करने के लिए उपयोगी प्रतीत होता है, जो इसमें करता है वास्तव में आयात की समस्याओं को हल करें और विकास सेटअप में सब कुछ सुचारू रूप से चल रहा है।
दृष्टिकोण बी:: स्वतंत्र रूप से सर्वर स्थापित करने के लिए और ग्राहक में सक्षम होने की आवश्यकता को पूरा करने के लिए, मैं करने के विचार के साथ आया था
- निंजा नामक एक नया प्रोजेक्ट बनाएं जो पैकेज
ninja
__init__.py
ninja
अन्य पुस्तकालयों (यदि स्थापित है) आयात करें, तो वेninja
।
मुझे अब तक काम करने के लिए यह नहीं मिला है और मुझे लगता है कि यह संभव भी संभव नहीं है।मैं इस तरह कुछ सोच रहा था:
# __init__.py of ninja
import ninja_core as core
# or this:
from ninja_core import core
# or this:
import ninja_core.core
मैंने इन्हें आजमाया और आयात त्रुटियों को फिर से प्राप्त कर लिया। पाइथन पैकेज को गठबंधन करने और मेरी समस्या से संबंधित कुछ भी नहीं ढूंढने के तरीकों के लिए googling के बाद मैं यहाँ आया था।
मैं सोच रहा था कि शायद पूरी चीज एक डिजाइन गलती है। क्लाइंट और सर्वर भी उसी पैकेज में होना चाहिए यदि उन्हें स्वतंत्र रूप से इंस्टॉल किया जा सके? क्या यह एक बुरा विचार है कि क्लाइंट और सर्वर को स्वतंत्र रूप से स्थापित करने में सक्षम होना चाहते हैं? मैं जावा में पैकेज क्यों बढ़ा सकता हूं, लेकिन पाइथन में नहीं? उसके पीछे क्या विचार है?
tl; डॉ
मैं निंजा पुस्तकालय जहां एक उपयोगकर्ता import ninja.client
और import ninja.server
ऐसा करने में सक्षम होना चाहिए विकासशील कर रहा हूँ। क्लाइंट और सर्वर अलग से पुस्तकालयों को स्थापित करना संभव है। यह कैसे प्राप्त करता है?
यह काम करता है:
और प्रत्येक परियोजना के लिए
setup.py
फ़ाइल नाम स्थान घोषित करना चाहिए , लेकिन चूंकि 'निंजा' फ़ोल्डर में '__init __ नहीं है। py' ग्रहण किसी सबफ़ोल्डर को पैकेज होने के लिए नहीं पहचानता है। क्या इसके लिए कोई विकल्प या आसान फिक्स है? – nfsक्षमा करें, कोई विचार नहीं; मैं ग्रहण या PyDev खुद का उपयोग नहीं करता; एक त्वरित Google दिखाता है कि दूसरों ने इसके बारे में शिकायत की है लेकिन मुझे आपके लिए कोई आसान समाधान नहीं दिख रहा है। –