2011-01-19 21 views
10

मैंने डाउनलोड किया और MySQL 5.5.8 (http://dev.mysql.com/downloads/mysql/) और MySQLdb पायथन प्लगइन के लिए निर्देशों का पालन किया। (http://sourceforge.net/projects/mysql-python/)पायथन आयात MySQLdb त्रुटि - मैक 10.6

जब मैं एक अजगर टर्मिनल के लिए MySQLdb आयात करने का प्रयास है, मैं नीचे त्रुटि मिलती है:

Safira:~ yanigisawa$ python --version 
Python 2.6.1 
Safira:~ yanigisawa$ python -c "import MySQLdb" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "build/bdist.macosx-10.6-universal/egg/MySQLdb/__init__.py", line 19, in <module> 
    File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 7, in <module> 
    File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 6, in __bootstrap__ 
ImportError: dlopen(/Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib 
    Referenced from: /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 
    Reason: image not found 
Safira:~ yanigisawa$ 

मैं ढेर अतिप्रवाह पर सवाल 4559699 पाया, और वहाँ निर्देशों का पालन किया:

Safira:~ yanigisawa$ echo $DYLD_LIBRARY_PATH 
/usr/local/mysql/lib 
Safira:~ yanigisawa$ ls -l /usr/local/mysql/lib 
total 363224 
-rwxr-xr-x 1 root wheel 3787328 Jan 18 19:41 libmysqlclient.16.dylib 
-rw-r--r-- 1 root wheel 10035336 Dec 3 13:26 libmysqlclient.a 
lrwxr-xr-x 1 root wheel  23 Jan 14 22:01 libmysqlclient.dylib -> libmysqlclient.16.dylib 
lrwxr-xr-x 1 root wheel  20 Jan 14 22:01 libmysqlclient_r.16.dylib -> libmysqlclient.dylib 
lrwxr-xr-x 1 root wheel  16 Jan 14 22:01 libmysqlclient_r.a -> libmysqlclient.a 
lrwxr-xr-x 1 root wheel  20 Jan 14 22:01 libmysqlclient_r.dylib -> libmysqlclient.dylib 
-rw-r--r-- 1 root wheel 88033760 Dec 3 13:22 libmysqld-debug.a 
-rw-r--r-- 1 root wheel 84075304 Dec 3 13:26 libmysqld.a 
-rw-r--r-- 1 root wheel  8472 Dec 3 13:26 libmysqlservices.a 
drwxr-xr-x 13 root wheel  442 Dec 3 13:53 plugin 
Safira:~ yanigisawa$ md5 /usr/local/mysql/lib/libmysqlclient.16.dylib 
MD5 (/usr/local/mysql/lib/libmysqlclient.16.dylib) = b8a78a93183720021b9dbe9ddad57111 
Safira:~ yanigisawa$ 

और सभी अजगर अंडे की फाइलों की सफाई के बाद, और पुनर्निर्माण, मुझे अभी भी वही त्रुटि मिली है। तब मुझे मैक 10.6 को प्रभावित करने वाले MySQL 5.5.8 में बग 59006 (http://bugs.mysql.com/bug.php?id=59006) मिला। मैंने वहां सूचीबद्ध काम-आसपास की कोशिश की, अंडे साफ कर दिए और पुनर्निर्मित किया, और मुझे अभी भी यह त्रुटि मिल रही है।

क्या इस समस्या के लिए पाइथन के लिए विशिष्ट कोई अन्य कार्य है? क्या मैं कुछ और याद कर रहा हूँ?

संपादित: otool आदेशों से उत्पादन जोड़ना:

$ otool -L /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 

:

Safira:~ yanigisawa$ otool -L /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 
/Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: 
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1) 
Safira:~ yanigisawa$ otool -DX /usr/local/mysql/lib/libmysqlclient.16.dylib 
/usr/local/mysql/lib/libmysqlclient.16.dylib 
Safira:~ yanigisawa$ 

उत्तर

11

आप otool चल वास्तव में क्या पुस्तकालय पथ पता लगाने के लिए MySQLdb सी विस्तार की कोशिश, _mysql.so की तलाश में है सकता है और उसके बाद MySQL लाइब्रेरी फ़ाइल का स्थापित लाइब्रेरी नाम:

$ otool -DX /usr/local/mysql/lib/libmysqlclient.16.dylib 

लेकिन आपको DYLD_LIBRARY_PATH (या install_name_tool का उपयोग निष्पादन योग्य संशोधित करने के लिए) का उपयोग करने का सहारा नहीं लेना चाहिए; इसे सेट करने की आवश्यकता लगभग हमेशा एक घटक का संकेत है जिसे गलत तरीके से बनाया या स्थापित किया गया था। मेरे अनुभव में, MySQL प्रोजेक्ट में उनके ओएस एक्स बिल्ड और इंस्टॉलर्स में स्थिरता के लिए बहुत अच्छा ट्रैक रिकॉर्ड नहीं है, क्योंकि उस मुद्दे के बारे में आप पुष्टि करते हैं।

ओएस एक्स 10.6 में Python, MySQLdb में काम करने का संयोजन, और MySQL पुस्तकालयों पाने के लिए कोशिश कर रहा है हताशा का एक बहुत ही आम कारण है: एसओ और अन्य जगहों पर इसके बारे में यहाँ कई प्रश्न। इसके लिए कई कारण हैं। मेरी सलाह है कि किसी तीसरे पक्ष के वितरकों में से एक से एक पूर्ण समाधान के साथ जाना है जो आपको आवश्यक सभी चीज़ों के संगत संस्करणों का निर्माण और स्थापित करेगा। और अगर आपको समय-समय पर घटकों को अपग्रेड करना होगा तो इसे काम करना चाहिए। मुझे MacPorts के साथ सालों में अच्छी सफलता मिली है; अन्य Fink या नए HomeBrew पसंद करते हैं। MacPorts से मूल फ़ाइलों को स्थापित करने के बाद MacPorts के साथ।

$ sudo port selfupdate # ensure the port files are up-to-date 
$ sudo port install py26-mysql 

MacPorts अजगर /opt/local/bin/python2.6 पर उपलब्ध होगा: dmg, तुम सब कुछ इतना की तरह बनाया गया हो सकता है। यदि आप Django चलाने की सोच रहे हैं, तो इसके लिए एक पोर्ट भी है।

संपादित करें: otool से अद्यतन आउटपुट के साथ, आप देख सकते हैं कि लाइब्रेरी पथ नामों का एक मेल नहीं है। MySQLdb एक्सटेंशन एक सापेक्ष पथ नाम (कोई प्रारंभिक /) के लिए पूछ रहा है, जबकि MySQL लाइब्रेरी स्वयं को एक पूर्ण पथ के साथ विज्ञापन करती है, आमतौर पर आप जो चाहते हैं। ऐसा लगता है कि यह MySQL अंक 59006 के विपरीत है, लेकिन यह जानने के बिना कि आपने अभी तक क्या कदम उठाए हैं, यह कहना मुश्किल है कि आप इस स्थिति में कैसे पहुंचे। का उपयोग करने के लिए _mysql.so को पूर्ण पथ नाम प्राप्त करने में सक्षम हो सकता है जो DYLD_LIBRARY_PATH सेट करने की आवश्यकता को भी समाप्त करेगा। यह कोशिश कर रहा लायक है:

$ cd ~/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp 
$ sudo install_name_tool -change libmysqlclient.16.dylib \ 
           /usr/local/mysql/lib/libmysqlclient.16.dylib \ 
         _mysql.so 

लेकिन यह एक गर्म और फजी लग रहा है कि आप जब आप कुछ अद्यतन करने की आवश्यकता परिणाम पुन: पेश कर सकते हैं के साथ छोड़ नहीं करना चाहिए। इन सभी टुकड़ों को विभिन्न स्रोतों से काम करने वाली किसी चीज में गोंद लगाने की कोशिश करने में वास्तव में कोई गुण नहीं है।

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

+0

मै मैक ओएस के लिए अभी भी नया हूं। (अब लगभग 2 महीने) मुझे आशा है कि "आग से परीक्षण" प्राप्त करने के लिए कहा जाए और सबकुछ मैन्युअल तरीके से कम या कम काम कर सके। हालांकि, अगर मैं यह काम नहीं कर पा रहा हूं, तो मै मैक पोर्ट्स विकल्प का उपयोग करने का सहारा लेगा। सलाह के लिये धन्यवाद। – yanigisawa

+0

मैकपॉर्ट्स समाधान अंततः काम किया। यह मेरी 2.6.1 स्थापना के साथ पायथन 2.6.6 स्थापित किया गया है, और/usr/bin/python अभी भी 2.6.1 की ओर इशारा करता है, जिसने मेरी अपाचे सीजीआई स्क्रिप्ट के साथ उपरोक्त त्रुटि उत्पन्न की है। मुझे 2.6.6 संस्करण में एक सिम्लिंक जोड़ना पड़ा, और सब कुछ ठीक काम करना शुरू कर दिया। धन्यवाद। – yanigisawa

+0

सुनने के लिए खुशी हुई। लेकिन सावधान रहें: सामान्य रूप से, '/ usr/local' के अलावा, '/ usr' में कुछ भी ओवरराइट करना बहुत बुरा विचार है। यह सब ओएस एक्स के हिस्से के रूप में ऐप्पल द्वारा प्रबंधित किया जाता है। मुझे यकीन नहीं है कि क्या आपका मतलब है कि आप '/ usr/bin/python' को ओवरराइट करते हैं। एकाधिक संस्करणों को संभालने के लिए बेहतर तरीके हैं 'स्टार्टअप फ़ाइलों को' $/PATH' के सामने '/ opt/local/library/frameworks/Python.framework/संस्करण/2.6/bin' डालने के लिए खोलें या संदर्भित करते समय पूर्ण संदर्भ का उपयोग करें पायथन के लिए, '/opt/local/bin/python2.6 '। मदद के लिए –

49

मेरे मामले में, मैं निम्नलिखित के रूप में http://ageekstory.blogspot.com/2011/04/installing-massive-coupon-on-mac-os-10.html

में के रूप में सांकेतिक लिंक के एक जोड़े को जोड़ने के द्वारा हल स्थिर पुस्तकालय (साइट.cfg में set static = True)। लेकिन इससे एक ही त्रुटि उत्पन्न हुई, क्योंकि _mysql.o अभी भी गतिशील पुस्तकालय के लिए पूछ रहा था। इसे ठीक करने के लिए, मैंने setup_posix.py में स्थिर होने पर ब्लॉक में libraries = [] जोड़ा।

+0

+1: इसे यहां भी हल करें =) –

+1

+1 यह अंततः कई घंटों के बाद मेरी समस्या का समाधान करता है, यहां तक ​​कि नेड डीली के संपादन के काम के बाद भी, लेकिन – cerberos

+0

+1 यह काम नहीं करता है! Tanx !!! – karantan

1

मैं साथ MySQLdb मॉड्यूल संकलन के द्वारा एक unfound गतिशीलता पुस्तकालय की समस्या को संबोधित करने की कोशिश की:

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