2016-03-27 8 views
24

मेरे पास requests.py नामक एक स्क्रिप्ट है जो अनुरोध पैकेज आयात करती है। स्क्रिप्ट या तो पैकेज से विशेषताओं तक नहीं पहुंच सकता है, या उन्हें आयात नहीं कर सकता है। यह क्यों काम नहीं कर रहा है और मैं इसे कैसे ठीक कर सकता हूं?लिपि से स्थापित पैकेज आयात करना "विशेषता त्रुटि: मॉड्यूल में कोई विशेषता नहीं है" या "आयात त्रुटि: नाम आयात नहीं कर सकता"

निम्नलिखित कोड AttributeError उठाता है।

import requests 

res = requests.get('http://www.google.ca') 
print(res) 
Traceback (most recent call last): 
    File "/Users/me/dev/rough/requests.py", line 1, in <module> 
    import requests 
    File "/Users/me/dev/rough/requests.py", line 3, in <module> 
    requests.get('http://www.google.ca') 
AttributeError: module 'requests' has no attribute 'get' 

निम्न कोड एक ImportError को जन्म देती है।

from requests import get 

res = get('http://www.google.ca') 
print(res) 
Traceback (most recent call last): 
    File "requests.py", line 1, in <module> 
    from requests import get 
    File "/Users/me/dev/rough/requests.py", line 1, in <module> 
    from requests import get 
ImportError: cannot import name 'get' 

The following code एक ImportError को जन्म देती है।

from requests.auth import AuthBase 

class PizzaAuth(AuthBase): 
    """Attaches HTTP Pizza Authentication to the given Request object.""" 
    def __init__(self, username): 
     # setup any auth-related data here 
     self.username = username 

    def __call__(self, r): 
     # modify and return the request 
     r.headers['X-Pizza'] = self.username 
     return r 
Traceback (most recent call last): 
    File "requests.py", line 1, in <module> 
    from requests.auth import AuthBase 
    File "/Users/me/dev/rough/requests.py", line 1, in <module> 
    from requests.auth import AuthBase 
ImportError: No module named 'requests.auth'; 'requests' is not a package 
+18

कृपया ध्यान दें कि यह एक आम प्रश्न के कैननिकल उत्तर के रूप में है ... कृपया तब तक डुप्लिकेट न करें जब तक कि आप सुनिश्चित न हों कि अन्य प्रश्न का एक बेहतर, अधिक पूर्ण उत्तर है। – Ffisegydd

उत्तर

29

यह इसलिए होता है क्योंकि अपने स्थानीय मॉड्यूल requests.py छाया स्थापित requests मॉड्यूल आप का उपयोग करने की कोशिश कर रहे हैं नाम दिया है। वर्तमान निर्देशिका sys.path पर प्रीपेड की गई है, इसलिए स्थानीय नाम को इंस्टॉल किए गए नाम पर प्राथमिकता दी गई है।

सूचना नाम आप में इस्तेमाल किया:

एक अतिरिक्त डिबगिंग टिप जब यह ऊपर आता है ध्यान से ट्रैसबैक को देखें, और पता है कि प्रश्न में अपनी स्क्रिप्ट का नाम मॉड्यूल आप आयात करने के लिए कोशिश कर रहे हैं मिलान है करने के लिए है अपनी स्क्रिप्ट:

File "/Users/me/dev/rough/requests.py", line 1, in <module> 

मॉड्यूल आप आयात करने के लिए कोशिश कर रहे हैं: requests

नाम टक्कर से बचने के लिए कुछ और करने के लिए अपने मॉड्यूल का नाम बदलें।

अजगर अपने requests.py फ़ाइल के आगे (अजगर 3 में __pycache__ निर्देशिका में) एक requests.pyc फाइल उत्पन्न हो सकती है। अपने नाम के बाद भी इसे हटाएं, क्योंकि दुभाषिया अभी भी उस फ़ाइल का संदर्भ देगा, त्रुटि को फिर से उत्पन्न करेगा। हालांकि, फ़ाइल __pycache__py फ़ाइल हटा दी गई है तो आपके कोड को प्रभावित नहीं करना चाहिए।

उदाहरण में, my_requests.py पर फ़ाइल का नाम बदलकर requests.pyc हटा रहा है, और फिर से चल रहा है सफलतापूर्वक <Response [200]> प्रिंट करता है।

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