পাইথন মাইসকিএলডিবি: পাঠাগারটি লোড করা হয়নি: libmysqlclient.18.dylib


172

আমি স্রেফ আমার ম্যাক ওএস 10.6 তে পাইথন ২.7 এর জন্য মাইএসকিএলডিবি সংকলন এবং ইনস্টল করেছি। আমি একটি সাধারণ পরীক্ষার ফাইল তৈরি করেছি যা আমদানি করে

import MySQLdb as mysql

প্রথমত, এই কমান্ডটি লাল আন্ডারলাইন করা হয় এবং তথ্যটি আমাকে "অমীমাংসিত আমদানি" বলে। তারপরে আমি নিম্নলিখিত সাধারণ পাইথন কোডটি চালানোর চেষ্টা করেছি

import MySQLdb as mysql

def main():
    conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )

if __name__ == '__main__'():
    main()

এটি কার্যকর করার সময় আমি নিম্নলিখিত ত্রুটি বার্তাটি পাই

Traceback (most recent call last):
  File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
    import MySQLdb as mysql
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
    \namespace cvdv
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
  Reason: image not found

আমার সমস্যার সমাধান কী হতে পারে?

সম্পাদনা: বাস্তবে আমি জানতে পারি যে লাইব্রেরিটি / ইউএসআর / স্থানীয় / মাইএসকিএল / লিবিতে রয়েছে। সুতরাং আমার পাইদেব গ্রহন সংস্করণটি এটি কোথায় খুঁজে পাওয়া উচিত তা আমাকে বলতে হবে। আমি এটি কোথায় সেট করব?

উত্তর:


323

আমি লাইব্রেরিতে একটি প্রতীকী লিঙ্ক তৈরি করে সমস্যার সমাধান করেছি। অর্থাত

আসল গ্রন্থাগারটি থাকে

/usr/local/mysql/lib

এবং তারপরে আমি একটি প্রতীকী লিঙ্ক তৈরি করেছি

/usr/lib

কমান্ডটি ব্যবহার করে:

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

যাতে আমার নিম্নলিখিত ম্যাপিং থাকে:

ls -l libmysqlclient.18.dylib 
lrwxr-xr-x  1 root  wheel  44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

ঐটা এটা ছিল. এরপরে সবকিছু ঠিকঠাক কাজ করেছে।

সম্পাদনা করুন:

লক্ষ্য করুন, যেহেতু ম্যাকোস এল ক্যাপিটান সিস্টেম ইনটিগ্রিটি প্রোটেকশন (এসআইপি, "রুটলেস" নামে পরিচিত) আপনাকে লিঙ্কগুলি তৈরি করতে বাধা দেবে /usr/lib/। আপনি এই নির্দেশাবলী অনুসরণ করে এসআইপি অক্ষম করতে পারেন, তবে আপনি /usr/local/lib/পরিবর্তে একটি লিঙ্ক তৈরি করতে পারেন :

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

47
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
হিউজেস

আমি mysql55ম্যাকপোর্টস এর মাধ্যমে ইনস্টল করেছিলাম এবং এই ত্রুটিটি সমাধান করতে sudo ln -s mysql/libmysqlclient.18.dylib /opt/local/lib/mysql55/libmysqlclient.18.dylib
পেরেছি

মাভেরিক্স আমার পুরানো সিমিলিংকটি সরিয়ে দেওয়ার পরে, আমাকে কিছুটা আলাদা জায়গা থেকে সিমিলিংক করতে হয়েছিল: sudo ln -s /usr/local/mysql-5.5.29-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
ম্যাট

2
আপনি যদি এল ক্যাপিটান: forums.developer.apple.com/thread/7935 তে চালাচ্ছেন তবে আপনাকে এসআইপিটি অক্ষম করতে হবে ।
জোশুয়া পিন্টার

এল ক্যাপিটানের একটি নতুন ইনস্টল করার পরে, আমি খুঁজে পেয়েছি যে এই টিপটির জন্য আপনাকে এসআইপি অক্ষম করার দরকার নেই।
লোনোশিয়ার

135

আমার পছন্দসই পদ্ধতিটি হ'ল অ্যাপ্লিকেশনটি কীভাবে চালিত হচ্ছে তার উপর নির্ভর করে পরিবেশের ভেরিয়েবলগুলির সাথে খেলার চেয়ে লাইব্রেরিটি স্থির করে দেওয়া। এটি আসলে একটি মোটামুটি সহজ প্রক্রিয়া।

প্রথমে আক্রমণাত্মক পাইথন মডিউলটি কোথায় রয়েছে তা দেখতে ত্রুটি আউটপুটটি দেখুন:

আমদানি ত্রুটি: dlopen (/ লাইব্রেরি / পাইথন/2.7/site-packages/_mysql.so, 2): লাইব্রেরি লোড করা হয়নি: libmysqlclient.18.dylib এর থেকে রেফারেন্স: / লাইব্রেরি / পাইথন / ২..7/সাইট- প্যাকেজস_মিসকিএল কারণ ছবিটি খুঁজে পাওয়া যায়নি

ঠিক আছে, তাই আপত্তিজনক ফাইলটি হ'ল / লাইবারি / পাইথন / ২..7 / সাইট-প্যাকেজ /_mysql.so

এরপরে, কোথায় _mysql.so মনে করে যে এটি libmysqlclient.18 খুঁজে পাওয়া উচিত বলে মনে করে dy

% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
    libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

সুতরাং, এটি libmysqlclient.18. সন্ধান করছে, কোনও পথের তথ্য নেই, আসুন এটি ঠিক করুন:

% sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so

এখন _mysql.so লাইব্রেরির পুরো পথটি জানেন এবং পরিবেশের ভেরিয়েবল নির্বিশেষে সবকিছুই কাজ করে।

% otool -L /Library/Python/2.7/site-packages/_mysql.so                                                                                           
/Library/Python/2.7/site-packages/_mysql.so:
    /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

4
এটি কি আরও ভাল সমাধান হবে না যাতে এটি এটি সমস্ত ভ্যুচুয়ালেন্সগুলির সাথে সংশোধন করে? sudo install_name_tool-परिवर्तিত libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib IR VIRTUAL_ENV / lib / পাইথন 2.7 / সাইট-প্যাকেজ / _mysql.so
ব্র্যাড

1
@ ব্র্যাডরুডারম্যান আমার ধারণা অনুমান করা জরুরী যে আপনি যখন আপনার দেওয়া আদেশটি চালাবেন তখন আপনি কেবল একটি ভার্চুয়ালেনভকে ঠিক করেন - আপনার বর্তমানটি। তদ্ব্যতীত, সকলেই (তাদের ক্ষতির দিকে) কোনও ভার্চুয়ালেনভে চলছে না, যাতে কমান্ড লাইনটি পোস্ট হওয়া সাধারণ সমাধান হিসাবে সাধারণ হয় না।
গ্রিনআসজেড

1
গুরুত্বপূর্ণ নোটটি প্রদত্ত উদাহরণটি বিশ্বব্যাপী পাইথন / মাইএসকিএল ঠিক করা আপনার নিজের ভার্চুয়াল পরিবেশের প্রতিটিটিতে এটি ঠিক করতে হবে। আপনি যদি আমার মত হন তবে আপনি ঠিক সেই প্রথম অংশটিই সেখানে জ্বলজ্বল করেছেন যেখানে তারা অবস্থান করছে _ মাইএসকিএল। সুতরাং এটি একটি গুরুত্বপূর্ণ পদক্ষেপ নেয়।
বেন রাবিদু

এটি ভার্চুয়াল পরিবেশের অভ্যন্তরে ইনস্টল _mysql.so এর জন্য কাজ করে এবং এল ক্যাপিটেনে SIP অক্ষম করার প্রয়োজন নেই।
হারুন ডি

@ কালেব :) ব্যাখ্যাটির জন্য ধন্যবাদ :) :) (ওয়াই)
শচীন মালহোত্রা

59

আমি দেখতে পেলাম যে এই সমস্যার জন্য একটি প্রতীকী লিঙ্ক তৈরি করার চেয়ে আরও একটি সমাধান রয়েছে।

আপনি আপনার ডিরেক্টরিতে পথ নির্ধারণ করেছেন, যেখানে libmysqlclient.18.dlib বাস করে, DYLD_LIBRARY_PATH পরিবেশ পরিবর্তনশীল। আমি যা করেছি তা হ'ল আমার .বাশ_ প্রোফাইলে নিম্নলিখিত লাইনটি দেওয়া:

export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH

এটাই.


7
এছাড়াও আছে, / usr / স্থানীয় / MySQL যা ইনস্টল করা সংস্করণে পয়েন্ট, তাই আমি আপনার লাইন পরিবর্তন করার পরামর্শ দিই এ সিমবলিক লিঙ্ক হল: রপ্তানি DYLD_LIBRARY_PATH =, / usr / স্থানীয় / MySQL / lib / অনুপস্থিত: $ DYLD_LIBRARY_PATH
ছিঁচকে চোর

37

আমার ক্ষেত্রে, আমি ম্যাক ওএস এক্স 10.9 ম্যাভেরিক্সের সাথে ত্রুটি পেয়েছিলাম। আমি ডিএমজি থেকে সরাসরি ওরাকল / মাইএসকিউএল ওয়েবসাইট থেকে মাইএসকিউএল সম্প্রদায় সার্ভার ইনস্টল করেছি।

আমার যা করার দরকার তা হ'ল lib ফাইলগুলিকে / usr / স্থানীয় / lib ডিরেক্টরিতে সিলেট করুন ink

mkdir -p /usr/local/lib   
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib

বোনাস: আপনি যদি ম্যাক ওএস এক্সও চালিয়ে যাচ্ছেন তবে libmysqlclient.18.dylib ফাইল, http://apps.tempel.org/FindAnyFile এর মতো ফাইলগুলি সন্ধান করার জন্য একটি দুর্দান্ত সরঞ্জাম রয়েছে । আমি মূলত dylib ফাইলের অবস্থান এটি খুঁজে পেয়েছি।


1
আমি /usr/local/libডিরেক্টরি তৈরি করতে হয়েছিল , কিন্তু একটি কবজ মত কাজ!
নিক মেরিল

25

আমি এটি আপনার। প্রোফাইলে বা .বাশার্কে (যা ব্যবহার করুন) এটি করা সহজ উপায় হ'ল, আপনার উত্স ফাইলগুলিতে পাথ রাখার তুলনায় সিএম লিঙ্কগুলি অগোছালো।

এছাড়াও yoshisurfs জবাবের সাথে তুলনা করুন, বেশিরভাগ সময় যখন mysql ইনস্টল হয়ে যায় তখন ব্যবহারের সহজলভ্যতার জন্য পুরো ফাইলের নাম নয়, কেবল mysql ডিরেক্টরিতে নাম পরিবর্তন করা উচিত।

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

2
এটি সত্যিই বুদ্ধিমান এবং সহজ উত্তর বলে মনে হচ্ছে। আমার জন্য ভাল কাজ - ধন্যবাদ!
দারাগ এনরাট

4

আমি বেশ কয়েকটি ভার্চুয়াল পরিবেশ নিয়ে এটি চালিয়েছি।

pip uninstall MySQL-python
pip install -U MySQL-python

দু'বার কাজ করেছেন।


আমার জন্যও কাজ করেছেন
থো


3

যারা হোমব্রু ব্যবহার করছেন তাদের জন্য আপনি এটিগুলি ঠিক করতে পারেন:

$ brew link mysql

> /Usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib - /usr/local/lib/libmysqlclient.18.dylib এই আমার জন্য কাজ, এটা ভালো একটা লিঙ্ক তৈরি করেছেন
জশুয়া Grigonis

2

আমার ক্ষেত্রে, এল ক্যাপিটনে (ওএসএক্স 10.11), আমাকে নিম্নলিখিতগুলি অনুসরণ করতে হবে ~/.bash_profile

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"

2

আপনি যখন এল ক্যাপিটনে থাকবেন তখন ত্রুটিটি পাবেন: ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted "সিস্টেম ইন্টিগ্রিটি প্রোটেকশন" বন্ধ করা দরকার।

প্রথমে পুনরুদ্ধার করুন এবং পুনরুদ্ধার মোডে প্রবেশ করতে সিএমডি + আর ধরে রাখুন, তারপরে টার্মিনালটি চালু করুন এবং কমান্ডটি টাইপ করুন: csrutil disableএখন আপনি পুনরায় বুট করতে পারেন এবং আবার চেষ্টা করতে পারেন।


আরেকটি উপায় ফাইল স্থানান্তর করতে পারেন libmysqlclient.18.dylibথেকে /usr/local/libএবং পাথ যোগ PATH=/usr/local/lib:$PATHbash_profile করতে। এটা আমার জন্য কাজ করছে।
বন সুয়ানপার্সার্ট

1

নতুন এল ক্যাপিটান ইনস্টলেশনটিতে যেখানে এসআইপি (রুটলেস ইউএসআর / লিব / অ্যাক্সেস প্রতিরোধ করে) ডিফল্টরূপে চালু থাকে এবং আপনি পুনরুদ্ধার মোডে না থাকলে আপনি সিমলিংক তৈরি করতে পারবেন না। @ অ্যানিস্যাক্সু যেমন বলেছিলেন আপনি এসআইপি অক্ষম করতে পারেন এবং / ইউএসআর / লিবিব / স্থানীয়কে আপনার সিমলিংক করতে পারেন এবং এটি কার্যকর হবে।

আপনি এসআইপি বন্ধ না করে ম্যাক ওএসএক্স এল ক্যাপিটেনে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

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

সেখানে একটি বিকল্প যেখানে আপনি রুট হিসাবে লগইন করতে পারেন ব্যবহার করা হয় এবং এই SIP র নিষ্ক্রিয় করতে পারেন কিন্তু চূড়ান্ত মুক্তির অপ্রচলিত যে এখন, আপনি এখানে এটি সম্পর্কে আরও পড়তে পারেন: https://forums.developer.apple.com/thread/4686

প্রশ্ন:

বিকাশকারী বিটা 1 তে একটি এনভ্রাম বুট-আরগস কমান্ড উপলব্ধ রয়েছে যা মূল সুবিধাগুলি দিয়ে চালিত হয়ে এসআইপি অক্ষম করতে পারে:

nvram boot-args="rootless=0"

এসআইপি নিষ্ক্রিয় করার এই বিকল্পটি কী এল ক্যাপিটান প্রকাশের সংস্করণে পাওয়া যাবে? নাকি এটি ডেভেলপার বিল্ডসের জন্য কঠোরভাবে?

উত্তর:

এই এনভিরাম বুট-আরগস কমান্ডটি চলে যাবে। এটি এল ক্যাপিটান রিলিজ সংস্করণে উপলভ্য হবে না এবং বিকাশকারী বিটাস শেষ হওয়ার আগে অদৃশ্য হয়ে যেতে পারে। ভবিষ্যতের বিকাশকারী বিটাসের জন্য প্রকাশিত নোটগুলিতে নজর রাখুন।


0

আমার এই সমস্যাটি ছিল এবং কীভাবে এটি ঠিক করতে হবে তা নির্ধারণ করতে আমার কিছুটা সময় নিয়েছিল।

আমার কেস কিছুটা আলাদা। আমার মাইএসকিউএল সার্ভারটি 5.1.x সংস্করণে রয়েছে। এবং কোনওভাবে আমি আমার মাইএসকিউএল-পাইথনকে 1.2.3 থেকে 1.2.5 এ উন্নীত করেছি। এবং আমি তখন থেকেই এই সমস্যাটি পেয়ে চলেছি ইভেন্টটি আমি নিম্নলিখিত নরম লিঙ্কটি যুক্ত করেছি।

libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

দেখা যাচ্ছে যে মাইএসকিউএল 5.1.x এর জন্য কোনও লিবমিস্ক্ল্লাইক্লিয়েন্ট .১৮.ডিলিব নেই, তবে কেবল লিবমিস্ক্লাইক্লেন্টিয়েন্ট .১..ডিলিব। আপনি আপনার মাইএসকিউএল-পাইথনকে 1.2.3 এ ডাউনগ্রেড করে বা আপনার মাইএসকিউএল সার্ভারকে 5.6.x এ আপগ্রেড করতে পারেন (আমি 5.5.x চেষ্টা করেছি না)

মাইএসকিউএল আপগ্রেড করা আমার পক্ষে কোনও বিকল্প নয় বলে আমি গ্রন্থাগারটি 1.2.3 এ ডাউনগ্রেড করেছিলাম।


0

http://dev.mysql.com/downloads/connector/c/ এ যান এবং মাইএসকিউএল সংযোগকারী / সি ডাউনলোড করুন। প্যাকেজ পাওয়ার পরে একটি নতুন ডিরেক্টরি 'মাইএসকিএল' তৈরি করুন, মাইএসকিএল সংযোগকারী ফাইলটি ডিরেক্টরি মাইএসকিএল এর অধীনে সঙ্কুচিত করুন, তারপরে মাইএসকিএল এর অধীনে, আরেকটি ফাঁকা ডিরেক্টরি 'বিল্ড' করুন, আমরা মাইএসকিউএল সংযোগকারী / সি তৈরি করতে 'বিল্ড' ব্যবহার করব। সিডি বিল্ড এন্ড এন্ড সিএমকে .. / আপনার- আমার এসকিউএল- সংযোগকারী-সোর্স -ডির মেক অ্যান্ড অ্যান্ড ইন্সটল মেক ইনস্টল করার পরে, আপনি / ইউএসআর / স্থানীয় এর অধীনে মাইএসকিএল নামের একটি ডিরেক্টরি পাবেন। এটিতে আপনার প্রয়োজনীয় সমস্ত শিরোনাম এবং লিব রয়েছে this এই ডাইরেক্টরিতে যান এবং শিরোনামগুলি এবং সম্পর্কিত অবস্থানগুলিতে অনুলিপি করুন।



0

ম্যাকএস-এ মাইএসকিউএল সংযোগকারী / সি-এর বাগ সম্পর্কে নোট (আমার বর্তমান সংস্করণটি 10.13.2), মাইএসকিএল_কনফিগটি ঠিক করুন এবং মাইএসকিএলসিলেট বা মাইএসকিউএল-পাইথন পুনরায় ইনস্টল করুন, এখানে বিশদটি রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.