2016-03-27 60 views
24

İstekler paketini içe aktaran requests.py adlı bir komut dosyası var. Komut, ya paketin özelliklerine erişemez ya da bunları içe aktaramaz. Neden bu çalışmıyor ve nasıl tamir edebilirim?Yüklenen paketi komut dosyasından içe aktarma "AttributeError: module özniteliği yoktur" veya "ImportError: adın içe aktarılamıyor"

Aşağıdaki kod AttributeError'u yükseltir.

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' 

Aşağıdaki kod bir ImportError yükseltir.

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

from requests import get 

res = get('http://www.google.ca') 
print(res) 
bir ImportError yükseltir. Yerel modül requests.py gölgeleri kullanmaya çalıştığınız yüklü requests modül adlı çünkü

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

Lütfen bunun ortak bir soruya kanonik bir cevap olarak tasarlandığını unutmayın. Diğer sorunun daha iyi, daha eksiksiz bir cevabı olduğundan emin değilseniz, lütfen çoğaltmayı kapatmayın. – Ffisegydd

cevap

29

bu gerçekleşir. Geçerli dizin sys.path olarak hazırlanmıştır, bu nedenle yerel ad, yüklü adın üzerinde önceliğe sahiptir.

Bildirimi kullanılan isim:

bu çıkageldi ekstra ayıklama ucu dikkatlice traceback bakmak ve söz konusu Senaryonuzun adı İçe çalıştığınız modülü eşleşen olduğunu fark etmektir senaryonuz:

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

modülü ithalat çalıştığınız: requests

adı çarpışmayı önlemek için başka bir şey için modül yeniden adlandırın.

Python, requests.py dosyanızın (__pycache__ dizinindeki Python 3 dizininin) yanında bir requests.pyc dosyası oluşturabilir. Bunu yeniden adlandırdıktan sonra, yorumlayıcı yine de bu dosyayı referans göstererek, hatayı yeniden üreterek kaldırın. Ancak, py dosya kaldırılmışsa, numaralı pyc10 dosya kodunuzu etkilememelidir.

Örnekte, dosyayı my_requests.py olarak yeniden adlandırmak, requests.pyc'u kaldırmak ve yeniden başarıyla çalıştırmak <Response [200]>'u yazdırır.