2010-02-28 40 views
12

मैंने कई समान त्रुटियां देखी हैं, लेकिन मुझे कोई समस्या नहीं दिखाई दे रही है जो मेरी विशेष समस्या पर लागू होती है।पायथन त्रुटि: आयात त्रुटि: नाम आयात नहीं कर सकता Akismet

मैं Akismet module जो मेरे PYTHONPATH पर है, तो अगर मैं इंटरैक्टिव दुभाषिया शुरू, जब मैं from akismet import Akismet चलाने (docstring कहते हैं) का उपयोग करने की कोशिश कर रहा हूँ, मैं निम्नलिखित त्रुटि मिलती है:

from akismet import Akismet 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: cannot import name Akismet 

उत्तर

6

यदि आपका पाइथोनपैथ सही ढंग से और वैश्विक रूप से सेट किया गया है (यह स्वयं परीक्षण किया गया है) यह पूरी तरह से काम करेगा।

  • "akismet.py" युक्त निर्देशिका में सेट होना चाहिए, फ़ाइल पथ नहीं! सुनिश्चित करें कि आप सापेक्ष पथ का उपयोग नहीं करते हैं।
  • ध्यान दें कि सभी प्रोग्रामों में पर्यावरण परिवर्तनीय परिवर्तन लागू करने के लिए आपको रीबूट/लॉगऑफ करने की आवश्यकता हो सकती है।
+0

मान लीजिए कि मैं है/path/मेरी PYTHONPATH पर, तो मैं /path/akismet/akismet.py (जोड़ने __init__.py) के साथ की कोशिश की, और /path/akismet.py साथ की कोशिश की जाने न तो काम किया – Doppelganger

+0

@Doppelganger: "Akismet.py" स्क्रिप्ट को "/ path /" में रखें और उस पथ को अपने PythonPATH में जोड़ें। यदि आपके पास PYTHONPATH में एकाधिक निर्देशिकाएं हैं तो सुनिश्चित करें कि आप कोलन को विभाजक के रूप में उपयोग करें। रीबूट करें और यह जांचने के लिए 'set' कमांड का उपयोग करें कि PYTHONPATH सही है या नहीं। तो यह निश्चित रूप से काम करना चाहिए। – AndiDog

+1

ठीक है, यहां वास्तविक मुद्दा यह था कि मैंने akismet फ़ोल्डर को _init_.py के अंदर जोड़ने वाले पैकेज के रूप में चिह्नित किया था, मैंने उस फ़ोल्डर को हटा दिया और यह ठीक काम करता है। – Doppelganger

2

आपके पास आपके पथ में 'अकिस्मेट' निर्देशिका वाली निर्देशिका होनी चाहिए। मुझे लगता है, आपने 'अकिस्मेट' निर्देशिका को $ PYTHONPATH में जोड़ा है।

जब आप लिखें:

from akismet import Akismet 

अजगर अपनी खोज पथ में कहीं फ़ाइल akismet/Akismet.py को खोलने के लिए कोशिश करता है।

यह सब मानते हैं Akismet एक फ़ाइल है और akismet एक निर्देशिका है। यदि akismet.py फ़ाइल है, तो इस फ़ाइल वाली निर्देशिका को $PYTHONPATH में सूचीबद्ध किया जाना चाहिए।

+0

मान लें कि मेरे पास PythonPATH पर/पथ/है, तो मैंने /path/akismet/akismet.py (__init__.py जोड़कर) के साथ प्रयास किया, और /path/akismet.py के साथ प्रयास किया न तो – Doppelganger

4

जांचें कि क्या आपका पाइथोनपैथ वास्तव में आप अपेक्षा करते हैं, उदाहरण के लिए एक इंटरैक्टिव कंसोल में ऐसा करके:

In [1]: import sys 

In [2]: print sys.path 

वास्तव में उन फ़ोल्डरों में से एक में akismet.py है?

15

मैं सिर्फ अपने प्रश्न के डोपेलगेगर के अपने उत्तर पर अधिक ध्यान आकर्षित करना चाहता हूं। मुझे यह त्रुटि थी, और स्थिति यह है:

आप 'strateg.py' नामक मॉड्यूल से फ़ंक्शन/क्लास एक्स आयात करने का प्रयास कर रहे हैं।

दुर्भाग्यवश आपने रणनीति नामक एक पायथन पैकेज निर्देशिका भी बनाई है, दूसरे शब्दों में आपको 'रणनीति' नामक एक निर्देशिका मिली है, जिसमें '____init___.py' नामक निर्देशिका 'रणनीति' में कम से कम एक फ़ाइल है।

root folder\ 
    strategy.py (contains function/class called X) 
    strategy\ 
     __init__.py 

तो आप तथ्य यह है कि आप अजगर पैकेज निर्देशिका बना लिया है के बारे में भूल है, और इसलिए

from strategy import X

की तरह, 'जड़' निर्देशिका में कुछ वर्ग या समारोह फ़ाइल strategy.py में परिभाषित आयात करने का प्रयास

आपको तब क्या मिलता है Python error: ImportError: cannot import name X त्रुटि है।

डोपेलगेंजर नोट्स के रूप में वास्तविक समस्या यह है कि पाइथन व्याख्याकर्ता आपके द्वारा बनाई गई पैकेज निर्देशिका को प्राथमिकता देता है, और पैकेज निर्देशिका में एक्स नामक फ़ाइल/मॉड्यूल की खोज करता है, और वास्तविक मॉड्यूल strategy.py को अनदेखा करता है, और उसमें फ़ंक्शन/कक्षा X जिसमें आप वास्तव में खोज रहे हैं।

यह वही है जो आप चाहते हैं और चाहते हैं कि आप पाइथन पैकेज पर प्रलेखन पढ़ते हैं, लेकिन यदि आपने अपना दिमाग आधा रास्ते बदल दिया है, तो आप अपने सिर को खरोंच कर सकते हैं।

+1

काम करने के लिए भी जांच करें * पाइथन के रूप में .pyc फ़ाइलों को * .py फ़ाइलों के साथ भी आयात किया जाएगा। पीईसी मेरे अस्तित्व का झुकाव है! – Rebs

1

सरल:

  1. सुनिश्चित करें कि आप स्थापित किया है Akismet करें (सिस्टम-वाइड या virtualenv)
  2. अपनी परियोजना के रूट निर्देशिका में
  3. सीडी एक अजगर खोल में चिपकाने (आयात Akismet) द्वारा सत्यापित करें और चलाने आपको लगता है कि नाम के साथ एक फ़ाइल मिल जाए (खोज। -नाम akismet.py)
  4. , देखते हैं कि आप यह
  5. फिर से चलाने के नाम बदल सकते हैं अगर (खोजें। -नाम akismet.pyc -print0 | xargs -0 rm -rf)

अब अपना आवेदन चलाएं और आपको जाने के लिए अच्छा होना चाहिए।

0

मैं हमेशा भूल जाता हूं कि ipython मॉड्यूल आयात करता है जब आप ipython दुभाषिया के अंदर run कमांड का उपयोग करते हैं। यह आपके द्वारा परिवर्तित किए गए किसी भी मॉड्यूल को फिर से आयात नहीं करेगा, इसलिए कोई भी नया चर या फ़ंक्शन नहीं मिलेगा। यह ipython के साथ known issue है।

निष्कर्ष: run का उपयोग करने से बचें क्योंकि यह आपके मॉड्यूल को पुनः लोड नहीं करेगा।

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