Python

2016-03-03 11 views
24

में AWS Lambda के साथ MySQL का उपयोग करने में समस्याएं मैं एडब्ल्यूएस लैम्ब्डा पायथन (पायथन बीटीडब्ल्यू में शुरुआती) के साथ उठने और चलने की कोशिश कर रहा हूं लेकिन MySQL निर्भरता सहित कुछ समस्याएं हैं। मैं अपने मैक पर निर्देश here का पालन करने की कोशिश कर रहा हूं।Python

कदम संख्या 3 के लिए, मैं अपने प्रोजेक्ट की जड़ में आदेश कर के साथ कुछ समस्या हो रही है

sudo pip install MySQL-python -t/

त्रुटि:

Exception: Traceback (most recent call last): File "/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip/basecommand.py", line 122, in main status = self.run(options, args) File "/Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg/pip/commands/install.py", line 311, in run os.path.join(options.target_dir, item) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 292, in move raise Error, "Destination path '%s' already exists" % real_dst Error: Destination path '/MySQL_python-1.2.5-py2.7.egg-info/MySQL_python-1.2.5-py2.7.egg-info' already exists

मैं अंत में मेरे निम्नलिखित लैम्ब्डा समारोह (काम करता है लेखन अपने Mac पर) है, जो है ठीक:

import MySQLdb 

def lambda_handler(event, context): 
    # Open database connection 
    db = MySQLdb.connect(...) 

    # prepare a cursor object using cursor() method 
    cursor = db.cursor() 

    sql = "SELECT * FROM Users" 

    try: 
     # Execute the SQL command 
     cursor.execute(sql) 
     # Fetch all the rows in a list of lists. 
     results = cursor.fetchall() 
     for row in results: 
     fname = row[0] 
     lname = row[1] 
     age = row[2] 
     sex = row[3] 
     income = row[4] 
     # Now print fetched result 
     print ("lname=%s" %(lname)) 
    except: 
     print "Error: unable to fecth data" 

    # disconnect from server 
    db.close() 

मैं पर क्या चला गया करने के लिए /Library/Python/2.7/site-p करने के लिए जाना है Ackages और MySQLdb फ़ोल्डर्स/फ़ाइलों पर प्रतिलिपि बनाते हुए डाउनलोड किए गए थे जब मैंने सुडो पाइप को MySQL-Python (बिना -t /) इंस्टॉल किया था (मुझे यकीन है कि मैं यहाँ कुछ गलत कर रहा हूं), मेरे लैम्ब्डा प्रोजेक्ट में, और फिर ज़िप्ड lambda_function.py के साथ सामग्री और AWS Lambda पर अपलोड किया गया।

तो मैं मिलता है: किसी भी मदद और सुझावों के लिए

Unable to import module 'lambda_function': No module named MySQLdb

आभारी!

संपादित

sudo पिप बनाने स्थापित MySQL-अजगर -t/pathToProject काम (टिप्पणी में सहायता के लिए धन्यवाद) ऐसा करने में सक्षम था, लेकिन अब मैं इस जब लैम्ब्डा समारोह runing:

Unable to import module 'lambda_function': /var/task/_mysql.so: invalid ELF header

मुझे पता है कि अगर मैं एक लिनक्स बॉक्स पर काम करता हूं, तो इसे ठीक काम करना चाहिए (जैसा कि कुछ लोगों द्वारा सुझाया गया है), लेकिन मुझे आश्चर्य है कि क्या मैं इसे ओएस एक्स बॉक्स से काम कर सकता हूं।

+0

'पायथन-सी" आयात sys का उत्पादन क्या है; प्रिंट (sys.path) "'? आप सिस्टम पायथन का उपयोग क्यों कर रहे हैं? क्या आपने होमब्री या मैकपोर्ट के साथ अपने 'usr/local' पथ में कोई इंस्टॉल नहीं किया है? यदि नहीं, तो आपको चाहिए। आपको पाइप के लिए 'सुडो' का उपयोग करने की आवश्यकता नहीं होगी क्योंकि यह आपके अपने उपयोगकर्ता के स्वामित्व में होगा और किसी भी सिस्टम की स्वामित्व वाली फाइलें नहीं बदलेगी। इसके अलावा, यह अजगर से पूरी तरह अलग हो जाएगा कि आपका सिस्टम इस पर निर्भर करता है। यह एक नया संस्करण भी होगा, क्योंकि यह एक भंडार से है। –

+0

यदि आपके पास यह नहीं है, तो 'http: // brew.sh' से 'curl' निर्देश के साथ होमब्रू इंस्टॉल करें और फिर' ब्रू इंस्टॉल पाइथन '' पाइप MySQLdb इंस्टॉल करें 'चलाएं। सत्यापित करें कि आपका पायथन 'python'' चलाकर/usr/local/bin में है - होमब्रे ने सही पाइथन खोजने के लिए '/ usr/local /' में देखने के लिए अपना $ PATH चर सेट किया होगा। –

+0

टिप्पणियों के लिए धन्यवाद, स्थापित करने के लिए होमब्री का उपयोग करेंगे। आपको अपडेट रखेगा (बीटीडब्ल्यू मैं पायथन में एक नौसिखिया हूं, इसलिए मुझे रैंप अप करने में मदद के लिए धन्यवाद) –

उत्तर

-1

मेरा मानना ​​है कि आपकी समस्या अधिकतर विकास पैकेजों को खोने के लिए नीचे है। मुझे लगता है कि आप निम्नलिखित की आवश्यकता होगी:

sudo यम स्थापित -y mysql-devel

+0

ओएस एक्स समकक्ष? –

+0

http://stackoverflow.com/a/35886213/3479860 –

+0

आह क्षमा करें मेरे मैक के लिए कभी यह नहीं था लेकिन मैंने अपने मैक पर सफलतापूर्वक MySQLdb पाइप मॉड्यूल स्थापित किया था। क्या आपके पास पहले से ही आपके मैक पर MySQL स्थापित है? यदि नहीं तो http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg – rahimbah

-3

समस्या मेरी उबंटू संस्थापक में इसी तरह होता है, वास्तविक समस्या है, क्योंकि यह एक mysql ग्राहक कनेक्टर ड्राइवर पर लंबित है। इसलिए समाधान MySQL-Python को खुश करने के लिए MySQL क्लाइंट-dev पैकेज स्थापित है (क्लाइंट लाइब्रेरी का उपयोग करने के लिए)।

# Ubuntu only(or setup vm for ubuntu inside your mac) 
# Three dependencies for MySQL python recompilation 
sudo apt-get install python-dev libssl-dev 

#Now the mysql client-dev 
sudo apt-get install libmysqlclient-dev 

# If you like mariadb client 
sudo apt-get install libmariadbclient-dev 
मैक लिए

# try this first 
fink install mysql-unified-dev 

# or this if above fail. 
brew install mysql 
# you must add this to your user profile startup if you use brew 
export PATH=$PATH:/usr/local/mysql/bin 

आप समान जवाब यहाँ प्राप्त कर सकते: Mac OS X - EnvironmentError: mysql_config not found

फिर पिप स्थापित प्रयास करें।

मैं किसी भी "सुडो पाइप" का उपयोग करने की अनुशंसा नहीं करता हूं। आपको अपने पायथन विकास के लिए वर्चुअलएन्व और वर्चुअलवापर सेट करना चाहिए, जो आपको बिना सूडो के पाइप करने की अनुमति देता है। और अलग-अलग तैनाती का परीक्षण करना और परीक्षण करना आसान है। (हालांकि यह mysqlclient-dev लाइब्रेरी समस्या को ठीक नहीं करता है)

0

आपको अपने पायथन पैकेज बनाने के लिए अमेज़ॅन लिनक्स इंस्टेंस का उपयोग करना होगा और फिर उन्हें अपने लैम्ब्डा परिनियोजन पैकेज में शामिल करना होगा। इसे कैसे करें इसके बारे में this excellent article देखें।लेख में वर्णित संकुल आपको आवश्यकतानुसार अलग हैं, लेकिन इसी तरह उसने मुझे मेरे लैम्ब्स के लिए psycopg2 और pymssql बनाने में मदद की।

+0

दिलचस्प! जैसे ही मैं छुट्टी से वापस आऊंगा, उतनी जल्दी कोशिश करूँगा।सुझाव –

6

लैम्बडा जैसे उपयोग के मामले के लिए आप PyMySQL जैसे शुद्ध पायथन कार्यान्वयन का उपयोग करके बहुत खुश होंगे।

यह MySQLdb के प्रतिस्थापन में एक बूंद है जो Python Database API विनिर्देशन का पालन करता है। लैम्ब्डा कार्यक्रमों की तरह अधिकांश चीजों के लिए यह उतना तेज़ होगा।

मैंने इसे उत्पादन में बहुत उपयोग किया है और यह बहुत अच्छा काम करता है।

+0

के लिए धन्यवाद, मुझे एक त्रुटि मिलती है 'आयात त्रुटि: MySQLdb नामक कोई मॉड्यूल नहीं जब मैं MySQLdb को अपने sqlalchemy मॉडल – Hussain

+0

@ सिस्टम सिस्टम के लिए PyMySQL के साथ प्रतिस्थापित करता हूं: क्या आप कृपया मुझे बता सकते हैं कि आपने अपने lamda में pymysql को कैसे शामिल किया है। – Nipun

+0

@ हुसैन हम sqlalchemy का उपयोग नहीं करते हैं, इसलिए मुझे यकीन नहीं है कि pymysql का उपयोग कैसे करें। यहां कुछ लिंक दिए गए हैं जो मूल उपयोग दिखाते हैं: http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html, http://docs.aws.amazon.com/lambda/ नवीनतम/डीजी/लैम्ब्डा-पायथन-कैसे-टू-निर्माण-तैनाती-पैकेज.html ... आपको इसे अपने प्रोजेक्ट निर्देशिका/तैनाती पैकेज में -t विकल्प के साथ स्थापित करने के लिए पीआईपी का उपयोग करना होगा। – systemjack

0

lambda-docker का उपयोग करके आप अपने लैम्ब्डा कार्यों को एक समान प्रकार के लिनक्स पर्यावरण तक पहुंच के बिना सेट अप और परीक्षण कर सकते हैं।

अपना लैम्ब्डा सेट अप करने के लिए, एक अलग डॉकर कंटेनर चलाने के लिए lambda-docker बिल्ड छवि का उपयोग करें और कंटेनर पर pip install <package> आदेश चलाएं। फिर कंटेनर निर्यात करें, usr/lib के तहत स्थापित संकुल को पकड़ें, और उन्हें अपने एडब्ल्यूएस लैम्ब्डा पैकेज में रखें।

फिर आप लैम्ब्डा-डॉकर छवि पर अपना लैम्ब्डा चलाकर संगतता के लिए परीक्षण कर सकते हैं। यदि यह काम करता है, तो आगे बढ़ें और विश्वास के साथ एडब्ल्यूएस लैम्ब्डा पर अपलोड करें।

docker run -d -v "$PWD":/var/task lambci/lambda:build-python2.7 tail -f /dev/null 

docker ps 

docker exec 0c55aae443e6 pip install pandas 

docker exec 0c55aae443e6 pip install sqlalchemy 

docker exec 0c55aae443e6 pip freeze 

docker exec 0c55aae443e6 python -c "import site; print(site.getsitepackages())" 

docker container export -o lambda_ready_container 0c55aae443e6 

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