CentOS 5에 Python 2.7을 설치하고 있습니다. 다음과 같이 Python을 빌드하고 설치했습니다.
./configure --enable-shared --prefix=/usr/local
make
make install
/ usr / local / bin / python을 실행하려고하면이 오류 메시지가 나타납니다.
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
/ usr / local / bin / python에서 ldd를 실행하면
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)
파이썬에게 libpython을 어디에서 찾을 수 있습니까?
답변
다음을 시도하십시오 :
LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/python
에 없는 경우 /usr/local/lib
설치 한 폴더로 교체하십시오 .libpython2.7.so.1.0
/usr/local/lib
이것이 작동하고 변경 사항을 영구적으로 만들려면 두 가지 옵션이 있습니다.
-
추가
export LD_LIBRARY_PATH=/usr/local/lib
사용자에.profile
홈 디렉토리에 (당신이 쉘을 사용하는 경우에만이 작동하는로드 새로운 쉘 인스턴스가 시작될 때이 파일). 이 설정은 사용자에게만 영향을줍니다. -
추가
/usr/local/lib
로/etc/ld.so.conf
실행ldconfig
. 이것은 시스템 전체의 설정입니다.
답변
내 묘비 모자를 쓰고 …
이 문제를 해결하는 가장 좋은 방법은 컴파일 타임입니다. 어쨌든 하나의 설정 접두어이므로 공유 라이브러리를 찾을 위치를 실행 파일에 명시 적으로 지정할 수도 있습니다. OpenSSL 및 기타 소프트웨어 패키지와 달리 Python은 대체 라이브러리 경로를 처리하기위한 멋진 구성 지시문을 제공하지 않습니다 (모든 사람이 루트가 아는 것은 아닙니다 …) 가장 간단한 경우 필요한 것은 다음과 같습니다.
./configure --enable-shared \
--prefix=/usr/local \
LDFLAGS="-Wl,--rpath=/usr/local/lib"
또는 비 리눅스 버전을 선호하는 경우 :
./configure --enable-shared \
--prefix=/usr/local \
LDFLAGS="-R/usr/local/lib"
” rpath
“플래그는 파이썬에게 특정 경로에 필요한 런타임 라이브러리가 있음을 알려줍니다. 표준 시스템 위치와 다른 위치에 설치된 종속성을 처리하기 위해이 아이디어를 더 활용할 수 있습니다. 예를 들어, 내 시스템에서는 루트 액세스 권한이 없으며 거의 완전히 자체 포함 된 Python을 설치해야하므로 configure 행은 다음과 같습니다.
./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
파이썬 디렉토리 트리 자체 내에서 디렉토리. 이렇게하면 python-$ {PYTHON_VERSION} 디렉토리를 tar하고 어디든지 착륙시킬 수 있으며 “작동”합니다 (달리지 libc
않거나 libm
충돌 하지 않는 경우 ). 또한 동일한 상자에서 여러 버전의 Python을 실행하려고 할 때 도움이됩니다. 계속 변경 LD_LIBRARY_PATH
하거나 잘못된 버전의 Python 라이브러리를 선택 하지 않아도됩니다 .
편집 : 언급 한 것을 잊어 버렸습니다 . PYTHONPATH
환경 변수를 접두사로 사용하는 것으로 설정하지 않고 일부 모듈을 컴파일하지 못하면 예를 들어 위의 예제를 확장하고 위의 PYTHONPATH
사용 된 접두어로 예를 들어 export PYTHONPATH=/apps/python-${PYTHON_VERSION}
…
답변
나는 같은 문제가 있었고 이런 식으로 해결했다.
libpython이 어디에 있는지 아는 경우 귀하의 경우에 해당한다고 가정하면 /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
하여 작동하는지 확인하십시오.
답변
나는 파이썬 3.5 설치 소프트웨어 모음을 최소화 CentOS는 7. 모두 자체적으로 잘 작동했지만 간단한 CGI 스크립트를 실행하려고 할 때이 질문에 언급 된 공유 라이브러리 오류를 보았습니다.
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
.profile 또는 .bashrc 파일에 export 문을 추가하는 것을 배제하기 위해 모든 사용자에게 작동하는 시스템 전체 영구 솔루션을 원했습니다. Red Hat 솔루션 페이지를 기반으로 한 줄 솔루션이 있습니다. 그것을 지적하는 의견에 감사드립니다.
echo 'source scl_source enable rh-python35' | sudo tee --append /etc/profile.d/python35.sh
다시 시작한 후에는 셸에서 모두 정상이지만 때로는 웹 서버가 여전히 불평합니다. 셸과 서버 모두에서 항상 작동하는 또 다른 접근 방식이 있으며 더 일반적입니다. 나는 여기 에 해결책을 보았고 실제로 여기에 대한 답변 중 하나에서 언급되었다는 것을 깨달았습니다! 어쨌든 CentOS 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 (verbose) 옵션은 무슨 일이 있었는지 확인하는 것입니다. 나는 그것을 보았습니다 : / 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
후에 권한 오류를 없애기 위해 사용자에게 아파치를해야했습니다.
라이브러리의 디렉토리를 찾기 위해 find 를 사용했습니다 . 당신은 또한 할 수 있습니다 :
sudo yum install mlocate
sudo updatedb
locate libpython3.5m.so.rh-python35-1.0
내 VM에서 다음을 반환합니다.
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
위와 같이 ldconfig에 제공해야 할 경로는 무엇입니까?
답변
Solaris 11에서
LD_LIBRARY_PATH_64
파이썬 라이브러리에 대한 심볼릭 링크를 해결하는 데 사용하십시오 .
내 경우에는 python3.6 LD_LIBRARY_PATH
이 작동하지 않았지만 작동했습니다 LD_LIBRARY_PATH_64
.
도움이 되었기를 바랍니다.
문안 인사
답변
이것은 나를 위해 일했다 …
$ sudo apt-get install python2.7-dev
답변
다음 명령을 사용하여 설치했습니다.
./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 / local / bin / python : 공유 라이브러리로드 중 오류 : libpython2.7.so.1.0 : 공유 객체 파일을 열 수 없음 : 해당 파일 또는 디렉토리가 없음
그런 다음 루트 사용자로부터 로그 아웃하고 다시 Python을 실행하려고 시도했지만 성공적으로 작동했습니다.