2011-11-17 2 views
6

मेरे Django प्रोजेक्ट में मेरे पास profile नामक एक ऐप है, जिसमें User ऑब्जेक्ट्स (डीजेगो लोगों से परिचित प्रतीत हो सकता है) पर अतिरिक्त जानकारी के लिए मेरे profile.models.UserProfile क्लास शामिल हैं। अब मैंने profile/__init__.py (कुछ संकेत) में कुछ प्रारंभिक कोड डाल दिया है और एक समस्या में भाग लिया है: Django मुझे बताता है कि hotshot_profile नामक एक तालिका नहीं मिली है।मैं पायथन के मॉड्यूल सिस्टम के भीतर क्लैम्स नामकरण से कैसे बचूं?

सचमुच खोज के घंटों के बाद, मैंने ऑर्डर आयात करने के लिए समस्या का पता लगाया। रनिंग python -v manage.py test मैं निम्नलिखित पाया है:

import nose.plugins.prof # precompiled from /home/rassie/.virtualenvs/myproject/lib/python2.6/site-packages/nose/plugins/prof.pyc 
import hotshot # directory /usr/lib64/python2.6/hotshot 
import hotshot # precompiled from /usr/lib64/python2.6/hotshot/__init__.pyc 
dlopen("/home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so", 2); 
import _hotshot # dynamically loaded from /home/rassie/.virtualenvs/myproject/lib64/python2.6/lib-dynload/_hotshot.so 
import hotshot.stats # from /usr/lib64/python2.6/hotshot/stats.py 
import profile # directory /home/rassie/MyProject/apps/profile 
import profile # precompiled from /home/rassie/MyProject/apps/profile/__init__.pyc 

तो मेरी नाक धावक आयात nose.plugins.prof (भले ही इस प्लगइन बंद है), आयात hotshot, जो profile आयात करना चाहता है। हालांकि, profileसे मेरा प्रोजेक्ट आयात किया जाता है, जबकि इसे तैयार करने के लिए सिस्टम पायथन से आयात किया जाना चाहिए था।

जाहिर है, मेरा profile मॉड्यूल सिस्टम profile मॉड्यूल के साथ मॉड्यूल संघर्ष करता है। मैं स्पष्ट रूप से अपने मॉड्यूलिंग नाम से पाइथन के साथ बंडल किए गए प्रत्येक मॉड्यूल नाम को बाहर नहीं कर सकता। तो सवाल यह है कि, मैं यहाँ से कहां से जाऊं? क्या मुझे अपने सभी ऐप्स के लिए myproject नेमस्पेस बनाना है? क्या Django उस के साथ काम करेंगे?

पुनश्च: तालिका का नाम hotshot_profilepybb से एक Profile वर्ग है, जो मैं भी अपने प्रोजेक्ट में उपयोग कर रहा हूँ के साथ एक और अभी तक होने वाली पूरी तरह से विश्लेषण किया नामकरण संघर्ष से आते हैं लगता है। लेकिन यह इस सवाल के दायरे से बाहर है।

उत्तर

5

आपको फॉर्म import mymodule (सापेक्ष आयात) में कभी भी अपने मॉड्यूल आयात नहीं करना चाहिए। इसके बजाय आपको हमेशा import myproject.mymodule का उपयोग करना चाहिए (पूर्ण आयात)। यह सभी नाम संघर्ष से बचाता है।

+1

मैंने हमेशा सोचा कि मैंने Django पर हर सलाह का पालन करके पूर्ण आयात का उपयोग किया है। ऐसा लगता है कि मुझे अपने ऐप्स को नामस्थान में रखना होगा और फिर वैश्विक पथ में रखना होगा और जैसा कि आप कहते हैं उन्हें आयात करें। हम देखेंगे कि क्या यह ठीक है :) –

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