পাইথন এক্সিকিউটেবল লাইবপিথন শেয়ার্ড লাইব্রেরি খুঁজে পাচ্ছে না


143

আমি সেন্টোস 5 এ পাইথন ২. installing ইনস্টল করছি I আমি পাইথনটি নিম্নলিখিতভাবে তৈরি এবং ইনস্টল করেছি

./configure --enable-shared --prefix=/usr/local
make
make install

আমি যখন / usr / লোকাল / বিন / পাইথন চালানোর চেষ্টা করি তখন আমি এই ত্রুটি বার্তাটি পাই

/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

আমি যখন / ইউএসআর / লোকাল / বিন / পাইথনে এলডিডি চালাই, তখন আমি পাই

ldd /usr/local/bin/python
    libpython2.7.so.1.0 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e9a00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000030e9200000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00000030fa200000)
    libm.so.6 => /lib64/libm.so.6 (0x00000030e9600000)
    libc.so.6 => /lib64/libc.so.6 (0x00000030e8e00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000030e8a00000)

পাইথনকে আমি কীভাবে লিপ্পিথন খুঁজে পাব?

উত্তর:


203

নিম্নলিখিত চেষ্টা করুন:

LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python

এটি যদি না থাকে তবে /usr/local/libআপনি যে ফোল্ডারটি ইনস্টল করেছেন তা প্রতিস্থাপন করুন ।libpython2.7.so.1.0/usr/local/lib

যদি এটি কাজ করে এবং আপনি পরিবর্তনগুলি স্থায়ী করতে চান তবে আপনার কাছে দুটি বিকল্প রয়েছে:

  1. যোগ export LD_LIBRARY_PATH=/usr/local/libআপনার টু .profileআপনার home ডিরেক্টরিতে (এই কাজ করে শুধুমাত্র যদি আপনি একটি শেল ব্যবহার করছেন যা লোড এই ফাইলটি একটি নতুন শেল উদাহরণস্বরূপ শুরু হয়)। এই সেটিংটি কেবল আপনার ব্যবহারকারীকেই প্রভাবিত করবে।

  2. যোগ /usr/local/libকরুন /etc/ld.so.confএবং চালান ldconfig। এটি অবশ্যই সিস্টেম-ওয়াইড সেটিংস।


এটি রফতান করার কোনও উপায় আছে যাতে এটি গ্রহনের সাথে কাজ করে? আমি এটি আমার। প্রোফাইলে যুক্ত করেছি তবে গ্রহটি জিডিবি চালু করতে সক্ষম নয়। (দ্রষ্টব্য: এটি ld.so.conf এ যুক্ত করা তবে কাজ করে)
শেথেরন

সুতরাং আমি পরীক্ষা করেছিলাম যে পরিবেশের ভেরিয়েবলগুলি গ্রহণটি চলছে এবং এটিতে সঠিক LD_LIBRARY_PATH রয়েছে। আমি বিশ্বাস করি যে এটি জিডিবি চালু করার সময় এটি কোনও শেল ব্যবহার করে না এবং তাই কোনও পরিবেশের ভেরিয়েবল পায় না! ডিবিগ কনফিগারেশনে লিবিপথন সেট করা কোনও উপকারই করতে পারেনি যেহেতু কেবল তখনই জিডিবি আসলে লোড হয় (তবে জিডিবি নিজেই লোড করার জন্য আমার লিব দরকার)
সেথেরন

1
আপনি যখন gdbকমান্ড লাইন থেকে চালিত হন এবং টার্মিনালে LD_LIBRARY_PATH সঠিকভাবে সেট আপ করা হয় আপনি কি অ্যাপ্লিকেশনটি সফলভাবে ডিবাগ করতে পারবেন ? যদি তা না হয় তবে আপনাকে সম্ভবত আপনার .gdbinitফাইলে এলডি_লিবিআরএআইপিএটিএল সেট আপ করতে হবে। আরও তথ্যের জন্য এই উত্তরটি দেখুন: stackoverflow.com/a/7041845/156771
তামাস

আমার অ্যাপ্লিকেশনটির আসল ডিবাগিংয়ের জন্য নয়, লঞ্চ জিডিবি (পাইথন লিবস) এর জন্য আমার এলডি_লিবিআরএইপ্যাথ দরকার। এখনও অবধি আমি ldconfig এ সেট করে এটি ঠিক করতে পেরেছি। আমি অ্যাপ্লিকেশনটি সিএলআইয়ের মাধ্যমে ডিবাগ করতে পারি কারণ এটি আমার জেডএসএইচআরসি ফাইল থেকে যদিও এলডি_লিবিআরএইপিএইচটি তুলবে।
শেথেরন

10
যে কেউ চেষ্টা করছে তার জন্য কেবল একটি নোট: এটি কেবল "/ usr / স্থানীয় / lib", এবং একটি "মূল হিসাবে অন্তর্ভুক্ত" অন্তর্ভুক্ত নয় ld.so.conf.d / *। কনফ "।
টিমাস

79

আমার গ্রাভেডিগার টুপি লাগানো ...

এটির সন্ধানের সবচেয়ে ভাল উপায় হ'ল সংকলনের সময়। যেহেতু আপনি যে কোনও একটি উপসর্গের উপস্থাপনা হ'ল নির্বাহীটিকে তার ভাগ করা লাইব্রেরিগুলি কোথায় পাবেন তা স্পষ্টভাবে বলতে পারেন। ওপেনএসএসএল এবং অন্যান্য সফ্টওয়্যার প্যাকেজগুলির থেকে পৃথক, পাইথন আপনাকে বিকল্প লাইব্রেরি পাথগুলি পরিচালনা করার জন্য দুর্দান্ত কনফিগার নির্দেশ দেয় না (প্রত্যেকেরই মূল আপনি জানেন না ...) সাধারণ ক্ষেত্রে আপনার যা যা প্রয়োজন তা হ'ল:

./configure --enable-shared \
            --prefix=/usr/local \
            LDFLAGS="-Wl,--rpath=/usr/local/lib"

অথবা আপনি যদি নন-লিনাক্স সংস্করণটিকে পছন্দ করেন:

./configure --enable-shared \
            --prefix=/usr/local \
            LDFLAGS="-R/usr/local/lib"

" rpath" ফ্ল্যাগ বলে পাইথন এটা রানটাইম লাইব্রেরি এটা যে বিশেষ পথে প্রয়োজন হয়েছে। আপনি স্ট্যান্ডার্ড সিস্টেমের অবস্থানগুলির চেয়ে পৃথক স্থানে ইনস্টল করা নির্ভরতাগুলি পরিচালনা করতে এই ধারণাটি আরও নিতে পারেন। উদাহরণস্বরূপ, আমার সিস্টেমে যেহেতু আমার কাছে রুট অ্যাক্সেস নেই এবং প্রায় সম্পূর্ণ স্ব-অন্তর্ভুক্ত পাইথন ইনস্টল করা প্রয়োজন, তাই আমার কনফিগার লাইনটি দেখতে এই রকম:

./configure --enable-shared \
            --with-system-ffi \
            --with-system-expat \
            --enable-unicode=ucs4 \
            --prefix=/apps/python-${PYTHON_VERSION} \
            LDFLAGS="-L/apps/python-${PYTHON_VERSION}/extlib/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/lib -Wl,--rpath=/apps/python-${PYTHON_VERSION}/extlib/lib" \
            CPPFLAGS="-I/apps/python-${PYTHON_VERSION}/extlib/include"

এই ক্ষেত্রে আমি লাইব্রেরি সংকলন করছি যে পাইথন ব্যবহার (যেমন ffi, readlineইত্যাদি) একটি মধ্যে extlibপাইথন ডিরেক্টরি ট্রি নিজেই মধ্যে ডিরেক্টরি। এইভাবে আমি অজগর - $ Y পাইথন_ভিভারশন} ডিরেক্টরিটি এড়াতে এবং এটিকে যে কোনও জায়গায় অবতরণ করতে পারি এবং এটি "কাজ" করবে (আপনি যদি সংঘাত libcবা libmদ্বন্দ্ব না করেন)। পাইথনের একাধিক সংস্করণ একই বাক্সে চালানোর চেষ্টা করার সময় এটিও সহায়তা করে, কারণ LD_LIBRARY_PATHপাইথন লাইব্রেরির ভুল সংস্করণটি বেছে নেওয়ার বিষয়ে আপনার নিজের পরিবর্তন বা উদ্বেগের দরকার নেই ।

সম্পাদনা: উল্লেখ করতে ভুলে গেছেন, আপনি যদি PYTHONPATHনিজের উপসর্গ হিসাবে পরিবেশের পরিবর্তনশীল সেট না করেন এবং কিছু মডিউল সংকলন করতে ব্যর্থ হন যেমন উদাহরণস্বরূপ, উপরের উদাহরণটি প্রসারিত PYTHONPATHকরতে উপরেরটিতে ব্যবহৃত উপসর্গটি সেট করুন উদাহরণস্বরূপ export PYTHONPATH=/apps/python-${PYTHON_VERSION}...


//, এটি যা খুঁজছে তা দেখে মনে হচ্ছে। "পাইথন-সংস্করণ ডিরেক্টরিটি টার্গেট করার এবং এটি যে কোনও জায়গায় অবতরণ করার উপায়গুলি সম্পর্কে আমি আরও কোথায় জানতে পারি এবং এটি" কাজ করবে "(আপনি লিবিসি বা লিবিম দ্বন্দ্বের মধ্যে না চলে) তবে" কাজ করবে " ? আপনি কি মনে করেন যে এটির বাইরে আলাদা স্ট্যাকওভারফ্লো ডটকম প্রশ্ন করা ভাল?
নাথান বাসানিজ 8'15

//, এছাড়াও, কিভাবে একটি সেট করা উচিত $PYTHON_VERSION?
নাথান বাসানিজ

//, আমি $PYTHON_VERSIONকনফিগার করার পরে সেট করেছি । এমনকি $PYTHON_VERSIONসেটটি সহ, Python build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
সংকলকটি

//, এর জন্য কি makeকমান্ড এবং অন্যান্য ইনস্টলেশন আদেশের কোনও পরিবর্তন দরকার ?
নাথান বাসানিজ

1
@ নাথান বাসানিজ বিজে ২, শাপ, জিডিবিএম, এলজমা ইত্যাদির ক্ষেত্রে নিখরচায় /apps/python-${PYTHON_VERSION}/extlibপাইথন তৈরির প্রক্রিয়াটি সঠিক স্থানে রয়েছে কিনা তা নিশ্চিত করার জন্য আপনাকে প্রথমে প্রত্যেকটির একটি উপসর্গ দিয়ে সংকলন করতে হবে। সিস্টেম স্তরের প্যাকেজগুলির ক্ষেত্রে, সম্ভবত আপনার জন্য ইনস্টল করার জন্য আপনি সম্ভবত কোনও রুট ব্যবহারকারীর উপর নির্ভর করতে আটকে থাকবেন। অথবা এমন কোনও বিকল্প সন্ধান করুন যা সংকলিত এবং অবতরণ করা যেতে পারেextlib
ফুশ

21

আমার একই সমস্যা ছিল এবং আমি এটি এইভাবে সমাধান করেছি:

আপনি যদি জানেন যে লিপিথন কোথায় থাকে, তবে আমি মনে করি এটি /usr/local/lib/libpython2.7.so.1.0আপনার ক্ষেত্রে হবে, আপনি কেবল এটির সাথে প্রতীকী লিঙ্ক তৈরি করতে পারেন:

sudo ln -s /usr/local/lib/libpython2.7.so.1.0 /usr/lib/libpython2.7.so.1.0

তারপরে lddআবার দৌড়াতে চেষ্টা করুন এবং দেখুন এটি কার্যকর হয়েছে কিনা।


6

আমি সেন্টস 7 ন্যূনতমতে সফ্টওয়্যার সংগ্রহ দ্বারা পাইথন 3.5 ইনস্টল করেছি । এটি সমস্ত নিজেরাই ঠিকঠাক কাজ করেছে, তবে আমি যখন একটি সাধারণ সিজিআই স্ক্রিপ্ট চালানোর চেষ্টা করেছি তখন এই প্রশ্নটিতে উল্লিখিত ভাগ করা লাইব্রেরি ত্রুটিটি দেখেছি:

tail /var/log/httpd/error_log
AH01215: /opt/rh/rh-python35/root/usr/bin/python: error while loading shared libraries: libpython3.5m.so.rh-python35-1.0: cannot open shared object file: No such file or directory

আমি একটি সিস্টেমভিত্তিক স্থায়ী সমাধান চেয়েছিলাম যা সমস্ত ব্যবহারকারীর পক্ষে কাজ করে, যাতে প্রফাইলে বা .bashrc ফাইলগুলিতে রফতানি বিবৃতি যুক্ত করা বাদ যায়। সেখানে এক লাইন সমাধান, উপর ভিত্তি করে রেড হ্যাট সমাধান পাতা। মন্তব্যটি যে এটি উল্লেখ করে জন্য ধন্যবাদ:

echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh

পুনঃসূচনা করার পরে, শেলটিতে এটি সমস্ত ভাল, তবে কখনও কখনও আমার ওয়েব সার্ভারটি এখনও অভিযোগ করে। এখানে আরও একটি পদ্ধতি রয়েছে যা সর্বদা শেল এবং সার্ভার উভয়ের জন্যই কাজ করে এবং আরও জেনেরিক। আমি সমাধানটি এখানে দেখেছি এবং তারপরে বুঝতে পেরেছিলাম যে এটি এখানে উত্তরগুলির মধ্যে একটিতেও উল্লিখিত আছে! যাইহোক, সেন্টস 7 এ, এই পদক্ষেপগুলি:

 vim /etc/ld.so.conf

আমার মেশিনে যা ছিল:

include ld.so.conf.d/*.conf

সুতরাং আমি একটি নতুন ফাইল তৈরি করেছি:

vim /etc/ld.so.conf.d/rh-python35.conf

এবং যোগ করেছেন:

/opt/rh/rh-python35/root/usr/lib64/

এবং নিজেই ক্যাশে পুনর্নির্মাণ করতে:

sudo ldconfig

এটাই, স্ক্রিপ্টগুলি ঠিকঠাক কাজ করে!

এটি ছিল একটি অস্থায়ী সমাধান, যা রিবুটগুলি জুড়ে কাজ করে না:

sudo ldconfig /opt/rh/rh-python35/root/usr/lib64/ -v

-V (ভার্বোস) বিকল্পটি কেবল কী চলছে তা দেখার জন্য। আমি দেখেছি এটি করেছে: / opt / rh / rh-python35 / root / usr / lib64: libpython3.so.rh-python35 -> libpython3.so.rh-python35 libpython3.5m.so.rh-python35-1.0 -> libpython3.5m.so.rh-python35-1.0

এই বিশেষ ত্রুটি চলে গেছে। ঘটনাচক্রে, আমি তার chownপরে অনুমতি ত্রুটি থেকে পরিত্রাণ পেতে আমাকে অ্যাপাচি করতে হয়েছিল।

নোট যে আমি ব্যবহৃত এটি গ্রন্থাগার করার জন্য ডিরেক্টরি সনাক্ত। আপনি এছাড়াও করতে পারেন:

sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0

যা আমার ভিএম-এ রিটার্ন দেয়:

/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0

Ldconfig কে আমার যে পথটি দেওয়া দরকার তা উপরের মতো দেখানো হয়েছে।


1
আপনি /etc/profile.d এ গিয়ে নিম্নলিখিত ফাইলগুলির সাথে এতে একটি ফাইল তৈরি করে নিজেকে কিছুটা বাঁচাতে পারতেন: #!/bin/bashএবং source scl_source enable rh-python35এতে। access.redhat.com/solutions/527703
ডগ

2

সোলারিস 11 এ

LD_LIBRARY_PATH_64পাইথন libs থেকে sylink সমাধান করতে ব্যবহার করুন ।

আমার ক্ষেত্রে পাইথন 3.6 এর জন্য LD_LIBRARY_PATHকাজ হয়নি তবেLD_LIBRARY_PATH_64 হয়নি করেছে।

আশাকরি এটা সাহায্য করবে.
শুভেচ্ছা সহ


1

এটি আমার পক্ষে কাজ করেছে ...

$ sudo apt-get install python2.7-dev

হাই এটি সঠিক সমাধান নয়, কারণ এর পরে, আপনার কাস্টম বিল্ড পাইথন বাইনারিটি আপনি এসটি-গেট থেকে ইনস্টল করা একটির থেকে .so ব্যবহার করছে। এটি একই সংস্করণ থাকা অবস্থায় সমস্যা সৃষ্টি করতে পারে বা আপনি অজগর উত্স কোডটি পরিবর্তন করে থাকলে এটি চেষ্টা করা হবে না।
আজুসা নাকানো

0

আমি কমান্ডটি ব্যবহার করে ইনস্টল করেছি:

./configure --prefix=/usr       \
            --enable-shared     \
            --with-system-expat \
            --with-system-ffi   \
            --enable-unicode=ucs4 &&

make

এখন, মূল ব্যবহারকারী হিসাবে:

make install &&
chmod -v 755 /usr/lib/libpython2.7.so.1.0

তারপরে আমি অজগরটি কার্যকর করার চেষ্টা করেছি এবং ত্রুটিটি পেয়েছি:

/ usr / স্থানীয় / বিন / পাইথন: ভাগ করা লাইব্রেরিগুলি লোড করার সময় ত্রুটি: libpython2.7.so.1.0: ভাগ করা বস্তু ফাইলটি খুলতে পারে না: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই

তারপরে, আমি মূল ব্যবহারকারী থেকে লগ আউট করেছি এবং আবার পাইথন চালানোর চেষ্টা করেছি এবং এটি সফলভাবে কাজ করেছে।


0

এর জন্য যা দরকার তা হ'ল লিপিপিথন [3 বা 2] ডেভ ফাইল ইনস্টল করা।


-1

শুধু পাইথন-লিবিব ইনস্টল করুন। (Python27-liberal এর সংক্ষিপ্ত রূপ)। এটি libpython2.7.so1.0 ইনস্টল করবে। আমাদের ম্যানুয়ালি কিছু সেট করার দরকার নেই।


4
//, এবং যদি আপনি চালু থাকেন তবে বলুন, CEntOS 6.3? এটি সেখানে কাজ করে না, এবং সাধারণত লোকেরা পাইথনকে একটি অদ্ভুত সংস্করণ, ভাঙ্গা, অবিশ্বাস্য, বা সামগ্রিক ব্যবস্থাকে স্পর্শ না করার জন্য অন্য কোনও ইচ্ছা হিসাবে কাজ করার জন্য পাইথনকে কম্পাইল করে।
নাথান বাসানিজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.