2017-02-02 1 views
1

필자는 지난 몇일 동안 내가 갖고있는 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 응용 프로그램을 올바르게 빌드하는 방법을 잘 모릅니다.

언제나처럼 첫 번째 질문은 다음과 같습니다. 여기에 명백한 것이 빠져 있습니까?
그렇지 않다면 제안 사항은 무엇입니까?
감사

답변

2

이 주석의 더, 그리고 정말 대답은,하지만 난 다음 ...

MAGICK_HOME

그것은 MAGICK_HOME 환경 변수를 설정하는 것이 현명를 제안합니다. 그러나os.path을 사용하여 시스템 절대 경로를 해결하는 것이 좋습니다. 친척이 아닌

os.environ['MAGICK_HOME'] = os.path.abspath('.') 

매우 사소하지만 도움이됩니다.

.DLL의 등

가 IM은 그 자체가 생태계의 것을 기억하십시오. wand에만 MagickWand & MagickCore 라이브러리가 필요하지만 IM은 모든 대리인/코더를 유용하게 사용해야합니다. 모든 것이 존재하는지 확인하고 QuickStart.txt을 다시 확인하십시오.

빌드 시스템에서 PyInstallers 번들 단계 중에 포함되어야하는 다른 경로를 보려면 identify 유틸리티를 확인하는 것이 좋습니다.내 맥에

identify -list Configure | grep PATH 

, 나는 CONFIGURE_PATH에서

CODER_PATH  /usr/local/lib/ImageMagick-6.9.5/modules-Q16/coders 
CONFIGURE_PATH /usr/local/etc/ImageMagick-6/ 
DOCUMENTATION_PATH /usr/local/share/doc/ImageMagick-6 
EXECUTABLE_PATH /usr/local/bin 
FILTER_PATH /usr/local/lib/ImageMagick-6.9.5/modules-Q16/filters 
INCLUDE_PATH /usr/local/include/ImageMagick-6 
LIBRARY_PATH /usr/local/lib/ImageMagick-6.9.5 
SHARE_PATH  /usr/local/share/ImageMagick-6 
SHAREARCH_PATH /usr/local/lib/ImageMagick-6.9.5/config-Q16 

... 파일 policy.xml 다음 수신하면 응용 프로그램이

+0

ImageTragick은 감사로부터 보호하기 위해 포함하는 것이 이상적 일 것이다. 내 일부에 대한 추가 연구가 시작된 전체 IM 패키지에 대한 매우 흥미로운 통찰력. 불행히도, 나는 여전히 "최후의 수단"이 효과가 없다는 점을 고려하여 수입을 제대로하는 방법을 아직 모르고있다 : 기계에서 IM이 발견되지 않을 때 설정해야 할 몇 가지 'winreg'키를 하드 코딩하고, 전체 IM 설치 디렉토리를 빌드에 포함 시켰지 만 여전히 의존성은 충족되지 않았습니다. – nxet