2012-12-13 16 views
7

Próbuję uzyskać dostęp do AWS za pomocą Boto, i to nie działa. Zainstalowałem Boto, a boto.cfg w/etc. Oto mój kod:Używanie Boto do łączenia się z S3 za pomocą Pythona

import requests, json 
import datetime 
import hashlib 
import boto 

conn = boto.connect_s3() 

oto błąd:

Traceback (most recent call last): 
    File "boto.py", line 4, in <module> 
    import boto 
    File "/home/mydir/public_html/boto.py", line 6, in <module> 
    conn = boto.connect_s3() 
AttributeError: 'module' object has no attribute 'connect_s3' 

Co do cholery? To nie jest skomplikowane.

+0

Nie wiem, czy mój błąd jest związany, ale jestem coraz boto/utils.py ", wiersz 171, w merge_meta jeśli k.lower() w boto.s3.key.Key.base_user_settable_fields: AttributeError: obiekt 'module' nie ma atrybutu 'klucz' – radtek

Odpowiedz

0

Być może trzeba zrobić coś podobnego do tego, jak musiałem wykorzystać klasę EC2Connection w niektórych z mojego kodu, który wygląda tak:

from boto.ec2.connection import EC2Connection 
conn = EC2Connection(...) 

Również od ich docs (http://boto.s3.amazonaws.com/s3_tut.html):

>>> from boto.s3.connection import S3Connection 
>>> conn = S3Connection('<aws access key>', '<aws secret key>') 

EDYCJA: Wiem, że strona dokumentu ma funkcję skrótu, której próbujesz użyć, ale widziałem podobny problem przy próbie zrobienia tego samego typu skrótu z EC2.

17

Wygląda na to, że plik, nad którym pracujesz, nazywa się boto.py. Myślę, że to, co się tutaj dzieje, to to, że twój plik się importuje - Python szuka modułów w katalogu zawierającym plik importujący, zanim pojawi się na twoim PYTHONPATH. Spróbuj zmienić nazwę na coś innego.

+0

To całkowicie zadziałało. Dziękujemy! –

+1

@RandallPinkston zaznacz to jako zaakceptowane – igaurav

+3

Pamiętaj, że będziesz musiał również usunąć wygenerowany plik 'boto.pyc', jeśli został utworzony. – jveldridge

0

Użyj klas połączeń.

np.

from boto.s3.connection import S3Connection 
from boto.sns.connection import SNSConnection 
from boto.ses.connection import SESConnection 

def connect_s3(self): 
    return S3Connection(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) 

def connect_sns(self): 
    return SNSConnection(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) 

def connect_ses(self): 
    return SESConnection(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) 
2

@ valdogg21

śledzę swoje instrukcje i umieścić to w moim kodu:

from boto.s3.connection import S3Connection 
conn = S3Connection('<aws access key>', '<aws secret key>') 

Ale mimo moich dobrych intencji, to wyniki w małym błędem. Właśnie wykonałem

sudo pip install boto --upgrade, aby upewnić się, że mam zainstalowaną najnowszą wersję.

To jest komunikat o błędzie. Po prostu zastanawiasz się, czy jestem samotny wilk lub jeśli inne wystąpienia tego problemu ...

from boto.s3.connection import S3Connection ImportError: cannot import name S3Connection

0

Próbowałem wszystkich rozwiązań, ale żaden z nich nie wydają się działać. Wciąż przechodzę przez StackOverFlow, ponieważ nie widzę nikogo innego, kto nie ma tego małego problemu. Dziwne jest to, że na serwerze działa jak urok. Problem jest na moim komputerze Mac

0

Miałem ten problem i napotkałem ten sam błąd podczas używania boto3 i moto do fałszywego s3.

boto3.connect_s3() 

Przełączyłem z powrotem moją bibliotekę na boto i działało dobrze. Wygląda na to boto3 dokonała migracji connect_s3() do zasobów():

boto.connect_s3() //works 
boto3.resources('s3') //works 

mogę rozwiązać podobny problem dla AWS Lambda TOO:

boto.connect_awslambda() //works 
boto3.client('lambda') //works 
Powiązane problemy