2013-02-03 5 views
7

저는 리눅스에서 PyInstaller 2.0을 사용하여 파이썬 스크립트의 바이너리 버전을 만들려고합니다. 나는 실행하면 : PyInstaller는 바이너리를 만들 때 libpython2.7.so를 찾을 수 없습니까?

8907 INFO: Looking for Python library libpython2.7.so 
Traceback (most recent call last): 
... 
    File "pyinstaller.py", line 91, in <module> 
    raise IOError("Python library not found!") 
IOError: Python library not found! 

방법이 고정 될 수있다
$ python pyinstaller.py myscript.py 

내가 오류가?

내가 사용하고 있습니다 :

리눅스 # 98 - 우분투 x86_64의 GNU/리눅스

를 파이썬 2.7으로. 이 시스템의 다른 비단뱀이있다 그러나 나는 것으로 설정되어 : 등, 거기에만 /usr/lib/python2.6하지 /usr/lib/python2.7입니다하지만 파이썬 2.7 나에 의해 일상적으로 사용하고 기능, 내가 사용하고있는 서버에서

alias python="python2.7" 

내가 너무 그것의 라이브러리를 찾는 것이 왜 문제가되는지 왜 보지 못합니까? /usr/local/lib/libpython2.7.a이 있습니다.

+0

: 어떤 배포판 (및 버전) 당신이 있습니까? 배포판의 기본 파이썬 패키지를 사용하고 있습니까? 다른 파이썬 설치가 있습니까? 실제로'/ usr/lib/libpython2.7.so' (또는 당신의 경로에있는 다른 곳)이 있습니까? (보통 두 개의 별도 pythonX.Y 패키지가 있는데, 하나는 인터프리터를 실행할 수있는 것, 하나는 C 확장을 컴파일하는 데 필요한 것을 모두 포함하고, 다른 하나는'pythonX.Y-dev'와 같은 이름이고, 때로는 libpythonX이다. Y는 후자의 일부입니다.) – abarnert

+0

@abarnert : 질문에 대한 답변을 편집했습니다. – user248237dfsf

+0

두 개의 Python 설치가있는 곳에서 대답하면 도움이 될 것입니다. 왜 2.6에'so'가 있지만 2.7에 있지 않습니까? 하지만 내 추측으로 대답하려고 노력할 것입니다. – abarnert

답변

6

In the server I am using, there's only /usr/lib/python2.6 and not /usr/lib/python2.7 but python 2.7 is used routinely by me and is functional, etc. so I don't see it why it would be a problem to find its libraries. There is a /usr/local/lib/libpython2.7.a.

libpython2.7.so가없는 경우 물론 해당 라이브러리를 찾는 것이 좋습니다.

파이썬 인터프리터를 사용할 수있는 이유는 정적으로 링크 된 것일 수 있습니다.

이 문제를 해결하는 방법에는 두 가지가 있습니다.

먼저 Python 2.7 용 공유 라이브러리를 설치할 수 있습니다. 예를 들어 Python 2.6과 함께 제공된 Ubuntu의 이전 버전을 사용하고 있고 python2.7 패키지에서 2.7을 설치했다면 이것은 libpython2.7을 설치해야합니다.

다른 소스에서 2.7을 얻은 경우 Ubuntu libpython2.7 패키지가 제대로 작동하지 않거나 python2.7 사본을 설치하여 이미 가지고있는 파일 중 일부를 덮어 쓰게됩니다. 확실히 혼란 스럽네. 어느 쪽이든 그것을하지 마십시오. 파이어 폭스의 나머지 부분을 기존 2.7 용으로 얻거나 2.7을 제거하고 우분투 패키지를 사용하십시오. (일부 Python 배포판의 경우 "나머지는 얻으십시오"는 불가능합니다. 공유 라이브러리를 설치하면 정적으로 링크 된 Python 실행 파일 대신 동적으로 링크 된 Python 실행 파일을 얻을 수 있기 때문입니다. 다시 설치하십시오.)

두 번째로 PyInstaller의 정적 라이브러리 지원을 사용할 수 있습니다. 자세한 내용은 ticket 420을 참조하십시오. 그러나이 설정을 사용하면 Pyinstaller가 플랫폼에 libpython2.7.so이 있지만 찾을 수 없다고 생각하면 libpython2.7.a을 찾아 정적으로 연결합니다. 내가 이것을 필요로했던 지난 번에, 그것은 트렁크로 점검되지 않았다. 티켓을 한눈에 살펴보면 패치가 포함되어 있지만 기본적으로 비활성화되어있는 PyInstaller 빌드와 이정표가 3.0으로 설정되어 있으므로 수동으로 PyInstaller을 빌드해야 작동 할 수 있습니다.

마지막으로 한가지 : 그것은 당신의 경로에 아무 /opt/python27와 함께, 당신은이 libpython2.7.so이하지 않는다 하지만 그냥 /opt/python27/lib이나 뭐 같은 곳 이상 설치되어있을 가능성이 있지만, 명시 적으로 내장되어 있기 때문에 /usr/local/bin/python27은 그것을 찾을 수 있습니다 물건을 밖으로 얻으십시오 /opt/python27. 이런 종류의 문제는 Linux 사용자가 아니라 MacPorts 나 Fink가있는 Mac 사용자에게만 문제가되는 경향이 있지만 불가능하지는 않습니다.이것이 문제 일 수 있다고 생각하면 /usr/local/bin/python27에 대한 dl 표를 볼 수 있습니다.

+0

"파이썬 2.7 용 공유 라이브러리를 설치할 수 있습니다"라고 쓰면 어떻게 할 수 있습니까? 파이썬 2.7의 자체 로컬 버전을 설치하고 전역 적으로 사용할 수있는 버전이 아닌 사용하는 것이 더 쉬울까요? – user248237dfsf

+0

나머지 단락을 읽었습니까? "만약 당신이 [우분투]''python2.7' 패키지에서 2.7을 설치했다면, 이것은'libpython2.7'을 설치하는 문제 일뿐입니다." 다른 소스에서 2.7을 설치 한 경우 설치 방법을 알려주지 않으면 분명히 그 질문에 대답 할 수 없습니다. – abarnert

+1

나는 분명히했는데 아직도 libpython 2.7을 설치하는 방법을 모른다. 표준 절차인가요? 나는 여기 sysadmin이 아니기 때문에/usr/*에 아무 것도 설치할 수 없다. – user248237dfsf

1

두 가지 옵션이 있습니다. libpython * .so가 있거나 시스템에 존재하지 않습니다. 루트 디렉토리에서 시작하는 find 유틸리티로 확인할 수 있습니다. 파일이 이미 있지만 PyInstaller에서 찾을 수없는 경우 : 가장 일반적인 조언은 단지 PyInstaller 코드를 열고이 라이브러리를 찾을 책임이있는 모듈을 찾는 것입니다. 그것은 간단한 편집기로 할 수 있습니다. 이 모듈로 가서 편집하여 특정 시스템에 어떤 문제가 있는지 이해하십시오. 코드는 간단하고시기 상조입니다. 이유를 이해하는 데 ~ 5 분이 소요됩니다. 제 경우에는 방금 LD_LIBRARY_PATH =/usr/local/lib를 내 사용자 프로필 (.bash_profile)에 추가하고이 * .so 파일이 내부에 있음을 확인했습니다. 파일이 시스템에 없거나 올바르지 않은 버전 인 경우 : python을 다시 설치하십시오.

1

@abarnert가 이미 말했듯이이 문제는 파이썬의 정적 컴파일 인 것으로 보입니다. 이 문제를 해결하기 위해 파이썬을 재 컴파일 할 필요가 있지만, 플래그를 --enable-공유 이번에 추가되는 :이 작업을 수행하면

[[email protected] ~]# ./configure --prefix=/usr/local --enable-shared 
    [[email protected] ~]# make && make altinstall 

, 당신이 요청 된 라이브러리 (libpython2.7.so를 찾을 수 있습니다. 1.0)에서/usr/local/lib 등의 경로 그래서 $ LD_LIBRARY_PATH 환경 변수에 해당 폴더를 추가하는 것을 잊지 마세요 : 먼저

[[email protected] tmp]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 
+0

누군가이 답변이 어느 시점에서 유용하지 않다고 말했습니까? 이유를 설명해 주시겠습니까? 테스트를 마쳤으며 적어도 비슷한 상황에서이 질문에서보고 된 오류를 실제로 솔직하게 해결하지만 누군가에게 도움이 될 수 있습니다. –

관련 문제