py2exe 계급 Python 스크립트에서 Qimage에 대한 JPEG 지원을 활성화 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/885906

문제

PYQT4와 함께 Python 스크립트의 Qimage 객체에서 JPEG 이미지를 사용하려고합니다.

스크립트 자체는 완벽하게 작동하며 이미지가로드되며 조작 및 렌더링 할 수 있습니다. 그러나이 스크립트를 Py2Exe로 "컴파일"하려고하면 모든 것이 작동하지만 JPEG 이미지는 작동합니다. PNG 등가 작품으로 교체하지만 프로그램은 웹에서 이미지를 다운로드하기 때문에 항상 PNG 형식이 아니며 다른 라이브러리로 모두 변환 할 수는 없습니다.

다른 이미지 형식과 함께 Qimage에 대한 JPEG 이미지 지원은 Qt Plugins ImageFormats 디렉토리의 일부 DLL에 의해 제공된다는 것을 발견했습니다 (qjpeg4.dll 및 qjpeg4d.dll이라고합니다). 나는 실행 파일에서 어떻게 든 그것들을 사용해야한다고 생각하지만, 나는 방법을 모른다. 나는 단순히 그것들을 내 EXE 디렉토리, 운이 없다는 것을 간단히 복사하려고 시도했습니다. 나는 시도했다 여기에 표시됩니다, 해당 파일을 setup.py 스크립트에 data_files로 포함시키기 위해 운이 좋지는 않지만 (운이없는 것처럼 보입니다.

JPEG 이미지와 함께 PYQT를 사용하여 소수의 응용 프로그램이 있다고 확신합니다. 어떻게해야합니까? 그것은 사소한 일처럼 보였지만 지금은 그것에 붙어 있습니다.

또한 내 앱이 크로스 플랫폼이되기를 원합니다 (Python에서 코딩하는 이유는 무엇입니까?), OS X 또는 Linux를위한 포장 할 때 그러한 포장 문제가 발생하지 않기를 바랍니다. 내가할까요?

도움이 되었습니까?

해결책

같은 문제로 몇 시간 동안 걸려 넘어진 후 Windows Vista : Python2.6 사용 솔루션을 공유하고 싶습니다.

다음 디렉토리를 py2exe에서 생성 한 Dist 디렉토리에 복사하십시오.

C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats

방금 qt.conf 또는 그와 비슷한 것을 더 이상 수정하지 않고 ImageFormats 디렉토리를 Dist Directory에 직접 삭제했습니다. 나는 그것을 시도하지 않았지만 이것은 포논에도 효과가있을 수 있습니다.

다른 팁

나는 py2exe + pyqt 조합을 꽤 올바르게 얻지 못했다고 고백해야 할 것이다 (py2exe는 크로스 플랫폼 포장에 전혀 도움이되지 않습니다). Pyinstaller는 훨씬 더 나은 것 같습니다. http://www.pyinstaller.org/ 오래되었지만 SVN 트렁크는 훨씬 최근입니다. 일부 문서는 최근 Pycon Italia Tre Conference에서 제공되는 슬라이드에 있습니다. http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf - 슬라이드는 영어로되어 있으며 현재 관리자의 이메일을 포함하므로 도움이됩니다! (그리고, 현재 관리자가 문서를 업데이트하도록 로비를합시다 ...!-)

추가 해보세요 Qt.conf QT에 바이너리와 플러그인을 찾을 위치를 알리기 위해 EXE 디렉토리에 파일을 파일하십시오.

다음과 같은 것은 간단한 케이스를 위해 작동합니다. 여기서 모든 DLL을 EXE와 동일한 DIR로 버립니다.

[Paths]
Prefix = .
Plugins = .

업데이트 : 그런 다음 플러그인 콘텐츠 (ImageFormat/SqlDriver 디렉토리 등)를 EXE DIR에 복사하십시오. EXE와 동일한 디렉토리에서 플러그인 DLL을로드 할 수 있다고 생각하지 않습니다. 보다 QT 플러그인 문서 플러그존 하위 디렉토리에 대한 자세한 내용. (또는 '플러그인 =.'를 제거하고 플러그인을 exe dir에 복사하여 /plugins/imageloaders/qjpeg4.dll이 있으시면).

Etienne- 팁 감사합니다. 많은 읽기와 시행 착오 후, 나는 같은 결론에 도달했습니다. PIL을 사용하여 py2app 생성 앱에서 JPEG를 보여줍니다.

http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriely-i-dont-ly-what-lo-whou whing-like-like-like-this/

내가 추측하는 것은 py2exe/windows에 대한 제안 된 솔루션이 반드시 py2app/osx에 적용되는 것은 아닙니다.

나는 OSX Leopard에 있습니다. 응용 프로그램이 있다고 가정 해 봅시다 MyApp.app.

  • 라이브러리를 넣으십시오 libqjpeg.dylib 그리고 libqgif.dylib 안에
    MyApp.app/Contents/plugins/imageformats/
  • 이것을 넣으십시오 qt.conf 안에 MyApp.app/Contents/resources/:

    [Paths]
    Prefix = .
    Binaries = .
    

내 컴퓨터 (Leopard)에서 이것은 작동합니다.

위의 모든 솔루션을 헛되이 시도한 후에는 PIL을 사용하여 이미지를로드했습니다. 이 이미지를 OpenGL QT 위젯의 텍스처로 변환하고 싶었 기 때문에 결과는 QT 또는 PIL을 사용하여 이미지를로드하든 동일했습니다. 그럼에도 불구하고, JPEG를로드하는 것과 같은 기본적인 것은 GUI 라이브러리에서 QT로 잘 알려져 있고 널리 사용되는 것처럼 너무 복잡하다는 것이 당황했습니다.

나는 똑같은 문제가 있었다. 이것을 사용하여 수정했습니다. http://mail.python.org/pipermail/python-list/2008-june/669374.html

  1. QT 플러그인을 디렉토리에 복사하십시오 : $ your_dist_path/pyqt4/플러그인;
  2. qt.conf를 Dist 디렉토리에 복사하십시오.
  3. qt.conf 편집, 접두사를 ./pyqt4로 변경하십시오

저에게있어 문제는 실행 파일의 디렉토리에 대해 "Qt.conf"를 복사하는 것만 해결되었습니다.

... pythonxx lib site-packages pyqt4 qt.conf에서 "qt.conf"를 찾을 수 있습니다.

도와 줘서 고마워.

위의 모든 것이 내가 번들링 .exe (즉, 옵션이 있었다. "bundle_files": 2 setup.py.

위의 솔루션은 괜찮습니다. 구체적으로, 나는 setup.py에 다음 줄을 추가했다 : data = [( "imageformats", glob.glob ( "c : python26 lib site-packages pyqt4 plugins imageformats*.dll")]

(물론 다른 파일 외에도).

그런 다음 이미지로드 DLLS는 my_exe_dir/imageformats에 있습니다.

이 작업을 수행하기 위해 QT.conf가 필요하지는 않았지만 디렉토리 트리를 덜 어수선하게 유지하려면 사용할 수 있다고 확신합니다.

blundle_files를 사용하여 Py2exe'd 스크립트와 함께 JPEG 플러그인을 사용할 수 있습니다. 이것을 제대로 작동시키기 위해 두 가지를 정리해야합니다.

  1. pyqt4/plugins/imageformats를 py2exe의 출력 디렉토리로 복사하십시오 (기본값 : dist)

    실제로 필요한 형식 만 복사하면됩니다.

  2. Billdle_Files 옵션을 사용하면 ZipFile에서 QT DLL 파일을 실행해야합니다. --dll-excludes Pyexe의 옵션.

    QT DLL을 다른 방법으로 QT DLLS를 출력 디렉토리에 복사해야합니다 (예 : data_files 옵션).

Windows에서는 제안 된 솔루션이 완벽하게 작동합니다.

그러나 OSX에서는 위의 지침으로도 작동 할 수 없습니다.

질문은 다음과 같습니다 libqjpeg.dylib 그리고 libqgif.dylib 파일은 /Developer/Applications/Qt/plugins/imageformats/ 디렉토리, 그리고 pyqt뿐만 아니라 QT 자체를 설치 한 경우. 이 파일은 나에게 효과가 없습니다.

PYQT 배포에서 파일이 보입니다 libqjpeg.bundle 그리고 libqgif.bundle 안에 /opt/local/libexec/qt4-mac/plugins/imageformats/, 그러나 이들은 라이브러리가 아니며 BTW는 .bundle 확장자가 있더라도 내용을 열 수 없습니다. 이 파일을 대신 사용하는 것은 작동하지 않습니다.

나는 당신이 OSX에서 작동하기 위해 무엇을했는지 궁금합니다. PYQT 다음을 설치했습니다 이 안내서.

질문에 대한 유용한 답변에 감사드립니다! 나는 당신과 같은 문제를 겪었고 해결책이 도움이되지 않습니다. 바라건대, 나는 VCS를 사용하고 있었고 이전 버전의 앱이 JPEG 이미지를 올바르게로드했으며 새로운 버전이 그 중지 된 것을 발견했습니다. 나는 Pyside를 사용 하여이 버그를 잡았습니다 v1.2.2.

라이브러리로드를 활성화하기 위해 @Macke와 동일한 솔루션을 사용했습니다 (즉, QT.conf가 추가 및 편집).

내 qt.conf는 다음이었습니다.

[Paths]
Binaries = .
Plugins = qtplugins

C:\Python27\Lib\site-packages\PySide\plugins directory 복사되었습니다 qtplugins 디렉토리, 다음 디렉토리가있었습니다.

qtplugins\accessible
qtplugins\codecs
qtplugins\graphicssystems
qtplugins\iconengines
qtplugins\imageformats

다음 코드가있었습니다.

class NotesCalendar(QtGui.QCalendarWidget):
    note_icon = QtGui.QImage("res/16note.png")

클래스 변수 이동 NotesCalendar.note_icon 생성자가 문제를 해결하고 QT는 라이브러리를 올바르게로드하기 시작했습니다. 클래스 변수 생성자는 일부 내부 파이 사이드 작업을 중단 한 것 같습니다.

Windows에 문제가없는 상태에서 작동합니다. 올바른 지정 qt.conf 그리고 복사 plugins 디렉토리는 JPEG 지원을 활성화하기에 충분합니다 py2exe + 파이 사이드 짓다. 물론 자신의 코드에 아무런 문제가 없어야합니다.

나는 이것이 하루에 누군가를 구하기를 바랍니다! ;)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top