Saya menginstal Python 2.7 pada CentOS 5. Saya membuat dan menginstal Python sebagai berikut
./configure --enable-shared --prefix=/usr/local
make
make install
Ketika saya mencoba menjalankan / usr / local / bin / python, saya mendapatkan pesan kesalahan ini
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
Ketika saya menjalankan ldd di / usr / local / bin / python, saya mengerti
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)
Bagaimana saya memberi tahu Python di mana menemukan libpython?
gdb
dari baris perintah dan LD_LIBRARY_PATH diatur dengan benar di terminal? Jika tidak, Anda mungkin harus menyiapkan LD_LIBRARY_PATH dalam.gdbinit
file Anda . Lihat jawaban ini untuk info lebih lanjut: stackoverflow.com/a/7041845/156771Mengenakan topi penggali kuburku ...
Cara terbaik yang saya temukan untuk mengatasi ini adalah pada waktu kompilasi. Karena Anda satu-satunya awalan pengaturan mungkin juga memberitahu yang dapat dieksekusi secara eksplisit di mana menemukan pustaka bersama. Tidak seperti OpenSSL dan paket perangkat lunak lain, Python tidak memberi Anda petunjuk konfigurasi yang bagus untuk menangani jalur pustaka alternatif (tidak semua orang adalah root, Anda tahu ...) Dalam kasus paling sederhana yang Anda butuhkan adalah yang berikut:
Atau jika Anda lebih suka versi non-linux:
rpath
Bendera " " memberi tahu python bahwa ia memiliki pustaka runtime yang dibutuhkan di jalur tertentu. Anda dapat mengambil ide ini lebih jauh untuk menangani dependensi yang diinstal ke lokasi yang berbeda dari lokasi sistem standar. Sebagai contoh, pada sistem saya karena saya tidak memiliki akses root dan perlu membuat instalasi Python hampir sepenuhnya mandiri, baris configure saya terlihat seperti ini:Dalam hal ini saya kompilasi perpustakaan yang menggunakan python (seperti
ffi
,readline
, dll) ke dalamextlib
direktori di dalam direktori pohon python itu sendiri. Dengan cara ini saya bisa tar direktori python - $ {PYTHON_VERSION} dan mendarat di mana saja dan itu akan "bekerja" (asalkan Anda tidak mengalamilibc
ataulibm
konflik). Ini juga membantu ketika mencoba menjalankan beberapa versi Python pada kotak yang sama, karena Anda tidak perlu terus mengubahLD_LIBRARY_PATH
atau khawatir tentang mengambil versi yang salah dari pustaka Python.Sunting: Lupa menyebutkan, kompilasi akan mengeluh jika Anda tidak mengatur
PYTHONPATH
variabel lingkungan ke apa yang Anda gunakan sebagai awalan dan gagal mengkompilasi beberapa modul, misalnya, untuk memperluas contoh di atas, aturPYTHONPATH
ke awalan yang digunakan di atas contoh denganexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...sumber
$PYTHON_VERSION
?$PYTHON_VERSION
setelah mengkonfigurasi. Bahkan dengan$PYTHON_VERSION
set, kompiler mengeluh tentangPython build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
perintah dan perintah instalasi lainnya?/apps/python-${PYTHON_VERSION}/extlib
untuk memastikan perpustakaan dan header mereka berada di lokasi yang tepat untuk proses pembuatan Python untuk menemukan. Mengenai paket tingkat sistem, Anda mungkin akan terjebak mengandalkan pengguna root untuk menginstalnya untuk Anda sebelumnya. Atau menemukan alternatif yang dapat dikompilasi dan mendarat diextlib
Saya memiliki masalah yang sama dan saya menyelesaikannya dengan cara ini:
Jika Anda tahu di mana libpython berada, saya kira itu akan ada
/usr/local/lib/libpython2.7.so.1.0
dalam kasus Anda, Anda bisa membuat tautan simbolik ke sana:Kemudian coba jalankan
ldd
lagi dan lihat apakah itu berhasil.sumber
Saya menginstal Python 3.5 oleh Software Collections di CentOS 7 minimal. Semuanya bekerja dengan baik sendiri, tetapi saya melihat kesalahan pustaka bersama yang disebutkan dalam pertanyaan ini ketika saya mencoba menjalankan skrip CGI sederhana:
Saya menginginkan solusi permanen sistemwide yang berfungsi untuk semua pengguna, sehingga tidak termasuk menambahkan pernyataan ekspor ke file .profile atau .bashrc. Ada solusi satu baris, berdasarkan halaman solusi Red Hat . Terima kasih atas komentar yang menunjukkan:
Setelah restart, semuanya baik-baik saja, tetapi kadang-kadang server web saya masih mengeluh. Ada pendekatan lain yang selalu bekerja untuk shell dan server, dan lebih umum. Saya melihat solusinya di sini dan kemudian menyadari itu sebenarnya disebutkan dalam salah satu jawaban di sini juga! Bagaimanapun, pada CentOS 7, ini adalah langkah-langkahnya:
Yang di komputer saya baru saja:
Jadi saya membuat file baru:
Dan menambahkan:
Dan untuk membangun kembali cache secara manual:
Itu saja, skrip bekerja dengan baik!
Ini adalah solusi sementara, yang tidak bekerja lintas reboot:
Opsi -v (verbose) hanya untuk melihat apa yang sedang terjadi. Saya melihat bahwa ia melakukannya: / 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
Kesalahan khusus ini hilang. Kebetulan, saya harus
chown
pengguna untuk apache untuk menyingkirkan kesalahan izin setelah itu.Perhatikan bahwa saya menggunakan find untuk mencari direktori untuk perpustakaan. Anda juga bisa:
Yang di VM saya kembali:
Yang merupakan jalur yang perlu saya berikan kepada ldconfig, seperti yang ditunjukkan di atas.
sumber
#!/bin/bash
dansource scl_source enable rh-python35
di dalamnya. access.redhat.com/solutions/527703Pada Solaris 11
Gunakan
LD_LIBRARY_PATH_64
untuk menyelesaikan symlink ke python libs.Dalam kasus saya untuk python3.6
LD_LIBRARY_PATH
tidak berhasil tetapiLD_LIBRARY_PATH_64
tidak.Semoga ini membantu.
Salam
sumber
Ini bekerja untuk saya ...
sumber
Saya menginstal menggunakan perintah:
Sekarang, sebagai pengguna root:
Kemudian saya mencoba mengeksekusi python dan mendapatkan error:
Kemudian, saya keluar dari root dan kembali mencoba mengeksekusi Python dan berhasil.
sumber
Yang dibutuhkan hanyalah instalasi file dev libpython [3 atau 2].
sumber
cukup instal python-lib. (python27-lib). Ini akan menginstal libpython2.7.so1.0. Kami tidak perlu mengatur apa pun secara manual.
sumber