source

Python 실행 파일에서 libpython 공유 라이브러리를 찾을 수 없음

ittop 2023. 7. 16. 17:57
반응형

Python 실행 파일에서 libpython 공유 라이브러리를 찾을 수 없음

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/liblibpython2.7.so.1.0에없면에 없는 /usr/local/lib.

이 작업이 수행되고 영구적으로 변경하려면 다음 두 가지 옵션이 있습니다.

  1. 더하다export LD_LIBRARY_PATH=/usr/local/lib의 신에게에..profile새 셸 인스턴스가 시작될 때 이 파일을 로드하는 셸을 사용하는 경우에만 작동합니다.이 설정은 사용자에게만 영향을 미칩니다.

  2. 더하다/usr/local/lib/etc/ld.so.conf그리고 실행ldconfig물론 이것은 시스템 전체의 설정입니다.

내 무덤 파는 모자를 쓰는 것은...

이 문제를 해결하는 가장 좋은 방법은 컴파일 시간입니다.사용자가 유일한 설정 접두사이므로 실행 파일의 공유 라이브러리 위치를 명시적으로 알려주는 것이 좋습니다.OpenSSL 및 다른 소프트웨어 패키지와 달리 Python은 대체 라이브러리 경로를 처리하는 데 필요한 구성 지침을 제공하지 않습니다(모든 사용자가 루트인 것은 아닙니다...). 가장 간단한 경우 다음만 있으면 됩니다.

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

또는 Linux가 아닌 버전을 선호하는 경우:

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

"rpath에게 해당 한 런타임 가 있음을 .표준 시스템 위치가 아닌 다른 위치에 설치된 종속성을 처리하기 위해 이 아이디어를 추가로 사용할 수 있습니다.예를 들어, 루트 액세스 권한이 없고 거의 완전한 자체 포함 Python 설치를 수행해야 하기 때문에 시스템에서 구성 라인은 다음과 같습니다.

./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"

에 저는 사용하는 (예: 이경나파예는사있컴라습다니고파하일를리이러브우용에이는하이썬예▁that▁in(:ffi,readline에.extlibpython 디렉터리 트리 자체 내의 디렉터리입니다.는 python-${ 수 은 " 것입니다(이런식로 python-에 ).PYthon_VERSION} 디렉토리에 태그를 지정하고 아무 곳에나 랜딩할 수 있습니다. 그러면 "작동할" 것입니다(만일 마주치지 않는다면).libc또는libm 하려고 할 됩니다. 계속 변경없기 입니다. 계속해서 변경할 필요가 없기 때문입니다.LD_LIBRARY_PATHPython 라이브러리의 잘못된 버전을 선택할 수도 있습니다.

편집: 언급하는 것을 잊었습니다. 만약 당신이 당신이 접두사로 사용하는 것으로 환경 변수를 설정하지 않고 일부 모듈을 컴파일하지 못한다면 컴파일이 불평할 입니다. 예를 들어, 위의 예제를 확장하기 위해,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

그한번달요세보려럼요▁running세▁then▁try를 실행해 보세요.ldd효과가 있었는지 다시 한 번 확인합니다.

Cent에 Software Collections로 Python 3.5를 설치했습니다.OS 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 파일에 내보내기 문을 추가하는 것을 제외하고 모든 사용자에게 작동하는 시스템 전체의 영구 솔루션을 원했습니다.Red Hat 솔루션 페이지에 기반한 한 줄 솔루션이 있습니다.지적해 주신 의견에 감사드립니다.

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

다시 시작한 후에는 셸에서 모두 정상이지만 웹 서버가 여전히 불만을 제기할 때가 있습니다.셸과 서버 모두에 대해 항상 효과가 있는 또 다른 접근 방식이 있으며, 보다 일반적입니다.는 여기서 솔루션을 보고 여기서 답변 중 하나에도 실제로 언급되어 있다는 것을 깨달았습니다!어쨌든, 센트에서.OS 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-dsc35/root/usr/lib64: libpython3.so .rh-dsc35 -> libpython3.so .rh-dsc35-1.0 -> libpython3.5m.so .rh-dsc35-1.0

이 오류는 사라졌습니다.그건 그렇고, 나는 해야만 했어요.chown사용자가 Apache를 사용하여 권한 오류를 제거할 수 있습니다.

라이브러리에 대한 디렉토리를 찾기 위해 찾기를 사용했습니다.다음 작업도 수행할 수 있습니다.

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

위와 같이 이것이 내가 tldconfig에 제공해야 하는 경로입니다.

이건 나한테 효과가 있었어요

$ sudo apt-get install python2.7-dev

Solaris 11에서

사용하다LD_LIBRARY_PATH_64python libs에 대한 심볼 링크를 확인합니다.

6 python3의 .6의 경우LD_LIBRARY_PATH효과는 없었지만,LD_LIBRARY_PATH_64

이게 도움이 되길 바랍니다.
안부 전해요

이 답변은 서버에서 인증확인 권한이 제한된 사용자에게 유용합니다.

가 있었어요.python3.5HostGator의 공유 호스팅에 있습니다. Python3.5로그인 후 매번 활성화해야 했습니다.해결을 위한 10가지 단계는 다음과 같습니다.

  1. scl 스크립트를 통해 python 사용python_enable_3.5또는scl enable rh-python35 bash.

  2. 실행하여 활성화되었는지 확인합니다.python3.5 --version이것은 당신의 파이썬 버전을 제공할 것입니다.

  3. 실행합니다.which python3.5그 길을 가기 위해.내 경우에는, 그것은./opt/rh/rh-python35/root/usr/bin/python3.5이 경로를 사용하여 버전을 다시 가져올 수 있습니다(이 경로가 제대로 작동하는지 확인하기 위해서만).

  4. 니합다훌까지 . 이제 다음 시간까지 현재 셸에서 나가십시오.scl.

  5. 이 한 python3 경로를 해 보겠습니다./opt/rh/rh-python35/root/usr/bin/python3.5 --version.

    그것은 당신에게 버전이 아닌 오류를 줄 것입니다.내 경우에는, 그것은.

/opt/rh/rh-python35/root/usr/bin/python3.5: error while loading shared libraries: libpython3.5m.so.rh-python35-1.0: cannot open shared object file: No such file or directory
  1. 타마스의 대답에서 언급했듯이, 우리는 그것을 찾아야 합니다.so 파일파.locate공유 호스팅에서 작동하지 않으며 이 또한 설치할 수 없습니다.

    다음 명령을 사용하여 해당 파일이 있는 위치를 찾습니다.

find /opt/rh/rh-python35 -name "libpython3.5m.so.rh-python35-1.0"
  1. 위의 명령은 파일의 전체 경로(두 번째 줄)를 찾으면 인쇄합니다.저의 경우, 출력은
find: `/opt/rh/rh-python35/root/root': Permission denied
/opt/rh/rh-python35/root/usr/lib64/libpython3.5m.so.rh-python35-1.0
  1. 다음은 Python 3.5가 이러한 공유 호스팅에서 작동하기 위한 완전한 명령어입니다. 이 명령어는 버전을 제공합니다.
LD_LIBRARY_PATH=/opt/rh/rh-python35/root/usr/lib64 /opt/rh/rh-python35/root/usr/bin/python3.5 --version
  1. 마지막으로, 속기의 경우 ~/.bashrc에 다음 별칭을 추가합니다.
alias python351='LD_LIBRARY_PATH=/opt/rh/rh-python35/root/usr/lib64 /opt/rh/rh-python35/root/usr/bin/python3.5'
  1. 위해 확을위다다로드니다합시음을 다시 합니다..bashrc타고source ~/.bashrc 행실을 실행합니다.python351 --version.

. 마다 자, 여있습다니가 됩니다. 이제 다시 로그인할 때마다, 당신은python351당신을 환영합니다

이는 단지 에 국한되지 않습니다.python3.5 다른 이 될 수 .scl설치된 소프트웨어.

다음 명령을 사용하여 설치했습니다.

./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

그런 다음 python을 실행하려고 시도했는데 다음 오류가 발생했습니다.

/usr/local/bin/messages: 공유 라이브러리 로드 중 오류 발생: libpython2.7.so .1.0: 공유 개체 파일을 열 수 없습니다.해당 파일 또는 디렉터리가 없습니다.

그런 다음 root 사용자에서 로그아웃하고 다시 Python을 실행하려고 시도했는데 성공적으로 작동했습니다.

libpython [3 또는 2] dev 파일 설치만 하면 됩니다.

python-lib만 설치하면 됩니다.(27-lib 미만).libpython 2.7.so 1.0을 설치합니다.수동으로 설정할 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/7880454/python-executable-not-finding-libpython-shared-library

반응형