필자는 지난 몇일 동안 내가 갖고있는 Python3.4 스크립트에서 dep 라이브러리가없는 응용 프로그램을 빌드하는 방법을 알아 내려고 노력했습니다. 여기에는 wand
의 가져 오기가 포함되며이 경우 컴퓨터에 ImageMagick
이 설치되어 있어야합니다.
지금까지 애플 리케이션은 소스 코드에서 실행되어 잘 동작하는 Wand 모듈에 필요한 모든 의존성을 발견하여 두 dev 환경 (Debian8/Win10) 모두 잘 작동합니다.PyInstaller + Wand (ImageMagick) - 누락 된 종속성
PyInstaller로 앱을 패키징 할 때 문제가 발생합니다.
빌드 프로세스가 예상대로 작동하여 ImageMagick 리소스 (.dll
등)를 가져 와서 다른 바이너리와 함께 출력 디렉토리에 포함 시키지만 IM 라이브러리가 설치되지 않은 컴퓨터에서 앱을 실행하면 가져 오기가 실패합니다.
그래서 나는 Wand 소스 코드를 파헤 치고 전역 시스템 경로 (예 : C : \ ProgramFiles)에서 의존성을 찾았습니다. 이 문제를 해결하기 위해 코드 내에서는 단지 './'
으로 변수를 덮어 씀으로써 모듈이 의존성을 가져 오도록 지시합니다. 그리고 그것은 한 지점까지 효과적이었습니다.
이제 앱을 시작할 수 있습니다. 가져 오기가 실패하지 않고 GUI가 그려지며 기능이 영향을받지 않습니다. 내가 어떤 지팡이-관련된 동작을 트리거하지 때까지 나는 다음과 같은 예외를 발생 응용 프로그램이 충돌 할 때마다 때문에 적어도 :
wand.exceptions.ConfigureError: RegistryKeyLookupFailed `CoderModulesPath' @ error/module.c/GetMagickModulePath/666
그것은 분명히 보인다 깨진 레지스트리 호출의 적절한 설치 시스템 전체 결과의 부족 (현재 win에서 테스트), 불행히도 CTypes (또는 ImageMagick 라이브러리에 바인딩하는 데 사용되는 것이 무엇이든)에 익숙하지 않아 no-deps 응용 프로그램을 올바르게 빌드하는 방법을 잘 모릅니다.
언제나처럼 첫 번째 질문은 다음과 같습니다. 여기에 명백한 것이 빠져 있습니까?
그렇지 않다면 제안 사항은 무엇입니까?
감사
ImageTragick은 감사로부터 보호하기 위해 포함하는 것이 이상적 일 것이다. 내 일부에 대한 추가 연구가 시작된 전체 IM 패키지에 대한 매우 흥미로운 통찰력. 불행히도, 나는 여전히 "최후의 수단"이 효과가 없다는 점을 고려하여 수입을 제대로하는 방법을 아직 모르고있다 : 기계에서 IM이 발견되지 않을 때 설정해야 할 몇 가지 'winreg'키를 하드 코딩하고, 전체 IM 설치 디렉토리를 빌드에 포함 시켰지 만 여전히 의존성은 충족되지 않았습니다. – nxet