Instaluję Python 2.7 na CentOS 5. Skompilowałem i zainstalowałem Pythona w następujący sposób
./configure --enable-shared --prefix=/usr/local
make
make install
Kiedy próbuję uruchomić / usr / local / bin / python, pojawia się ten komunikat o błędzie
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
Kiedy uruchamiam ldd na / usr / local / bin / python, otrzymuję
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)
Jak powiedzieć Pythonowi, gdzie znaleźć libpython?
gdb
z wiersza poleceń, a LD_LIBRARY_PATH jest poprawnie skonfigurowana w terminalu? Jeśli nie, prawdopodobnie będziesz musiał ustawić LD_LIBRARY_PATH w swoim.gdbinit
pliku. Zobacz tę odpowiedź, aby uzyskać więcej informacji: stackoverflow.com/a/7041845/156771Zakładam kapelusz grabarza ...
Najlepszym sposobem rozwiązania tego problemu jest kompilacja. Ponieważ i tak jesteś jedynym ustawieniem prefiksu, równie dobrze możesz wyraźnie powiedzieć plikowi wykonywalnemu, gdzie znaleźć jego biblioteki współdzielone. W przeciwieństwie do OpenSSL i innych pakietów oprogramowania, Python nie daje ładnych dyrektyw konfiguracyjnych do obsługi alternatywnych ścieżek bibliotek (nie każdy jest rootem, którego znasz ...) W najprostszym przypadku wszystko, czego potrzebujesz, to:
Lub jeśli wolisz wersję inną niż Linux:
Flaga "
rpath
" mówi Pythonowi, że ma biblioteki uruchomieniowe, których potrzebuje w tej konkretnej ścieżce. Możesz rozwinąć ten pomysł, aby obsłużyć zależności zainstalowane w innej lokalizacji niż standardowe lokalizacje systemu. Na przykład w moich systemach, ponieważ nie mam uprawnień administratora i muszę wykonywać prawie całkowicie samodzielne instalacje Pythona, moja linia konfiguracji wygląda następująco:W tym przypadku jestem kompilacji bibliotek że używa python (jak
ffi
,readline
itp) w jegoextlib
katalogu w drzewie katalogów samego Pythona. W ten sposób mogę tarować katalog python - $ {PYTHON_VERSION} i wylądować w dowolnym miejscu, a to będzie „działać” (pod warunkiem, że nie napotkaszlibc
ani nie wystąpiąlibm
konflikty). Pomaga to również, gdy próbujesz uruchomić wiele wersji Pythona na tym samym pudełku, ponieważ nie musisz ciągle zmieniać swojegoLD_LIBRARY_PATH
lub martwić się o wybranie niewłaściwej wersji biblioteki Pythona.Edycja: Zapomniałem wspomnieć, że kompilacja będzie narzekać, jeśli nie ustawisz
PYTHONPATH
zmiennej środowiskowej na to, czego używasz jako prefiksu i nie uda ci się skompilować niektórych modułów, np. Aby rozszerzyć powyższy przykład, ustawPYTHONPATH
przedrostek użyty w powyższym przykład zexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...źródło
$PYTHON_VERSION
?$PYTHON_VERSION
po skonfigurowaniu.$PYTHON_VERSION
Jednak nawet z zestawem kompilator narzekaPython build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
polecenia i innych poleceń instalacyjnych?/apps/python-${PYTHON_VERSION}/extlib
aby upewnić się, że ich biblioteki i nagłówki znajdują się we właściwej lokalizacji do znalezienia przez proces tworzenia w Pythonie. Jeśli chodzi o pakiety na poziomie systemu, prawdopodobnie utkniesz, polegając na użytkowniku root, który zainstaluje je wcześniej. Lub znalezienie alternatywy, którą można skompilować i wylądować wextlib
Miałem ten sam problem i rozwiązałem go w ten sposób:
Jeśli wiesz, gdzie znajduje się libpython, przypuszczałem, że tak będzie
/usr/local/lib/libpython2.7.so.1.0
w twoim przypadku, możesz po prostu utworzyć symboliczne łącze do niego:Następnie spróbuj
ldd
ponownie uruchomić i sprawdź, czy zadziałało.źródło
Zainstalowałem Python 3.5 firmy Software Collections na minimalnym systemie CentOS 7. Wszystko działało dobrze, ale widziałem błąd biblioteki współdzielonej wspomniany w tym pytaniu, gdy próbowałem uruchomić prosty skrypt CGI:
Chciałem mieć trwałe rozwiązanie systemowe, działające dla wszystkich użytkowników, wykluczające dodawanie instrukcji eksportu do plików .profile lub .bashrc. Istnieje rozwiązanie jednowierszowe, oparte na stronie rozwiązań Red Hat . Dziękuję za komentarz, który na to wskazuje:
Po ponownym uruchomieniu wszystko działa dobrze w powłoce, ale czasami mój serwer sieciowy nadal narzeka. Istnieje inne podejście, które zawsze działało zarówno dla powłoki, jak i serwera, i jest bardziej ogólne. Widziałem tutaj rozwiązanie , a potem zdałem sobie sprawę, że tak naprawdę jest wspomniane w jednej z odpowiedzi tutaj! W każdym razie w CentOS 7 są to kroki:
Który na moim komputerze właśnie miał:
Więc utworzyłem nowy plik:
I dodał:
Aby ręcznie odbudować pamięć podręczną:
To wszystko, skrypty działają dobrze!
To było tymczasowe rozwiązanie, które nie działało po ponownym uruchomieniu:
Opcja -v (gadatliwa) służyła tylko do sprawdzenia, co się dzieje. Widziałem, że tak: / 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
Ten konkretny błąd zniknął. Nawiasem mówiąc, musiałem
chown
apache użytkownika, aby pozbyć się błędu uprawnień po tym.Zauważ, że użyłem find do zlokalizowania katalogu biblioteki. Możesz też:
Który na mojej maszynie wirtualnej zwraca:
Którą ścieżkę muszę podać ldconfig, jak pokazano powyżej.
źródło
#!/bin/bash
isource scl_source enable rh-python35
w nim. access.redhat.com/solutions/527703W systemie Solaris 11
Służy
LD_LIBRARY_PATH_64
do rozwiązywania dowiązań symbolicznych do bibliotek Python.W moim przypadku python3.6
LD_LIBRARY_PATH
nie działał, aleLD_LIBRARY_PATH_64
.Mam nadzieję że to pomoże.
pozdrowienia
źródło
To zadziałało dla mnie ...
źródło
Zainstalowałem za pomocą polecenia:
Teraz jako użytkownik root:
Następnie próbowałem uruchomić Pythona i otrzymałem błąd:
Następnie wylogowałem się z użytkownika root i ponownie spróbowałem uruchomić Pythona i zadziałało pomyślnie.
źródło
Wszystko czego potrzebuje to instalacja libpython [3 lub 2]. Instalacja plików dev.
źródło
po prostu zainstaluj python-lib. (python27-lib). Zainstaluje libpython2.7.so1.0. Nie wymagamy ręcznego ustawiania czegokolwiek.
źródło