python에서 Qt module을 compile하여 import

bluelukas의 이미지

Open source Qt module인 Hex decimal view/editor인 "QHexEdit2" 라는 module을
python에서 사용하려고 합니다.

PC및 SW환경 : Windows8.1(64bit), python3.5, Visual studio 2015, PyQt5.6.0 입니다.
QHexEdit2 github link =
https://github.com/Simsys/qhexedit2

현재 상태는 Windows8.1-64bit(Windows7-32bit도 시도했지만 동일현상) 환경에서
해당 module이 import되도록 시도했지만 아직까지 성공하지 못했구요.
최종 error상태는 첨부와 같이
"fatal error C1083: Cannot open include file: 'QMetaType': No such file or directory"
message가 출력되며 install이 안되는 상태입니다.
사실 여기에 질문하기 전 stackoverflow에 질문했습니다만, 엉터리 영작실력과
초보 python programmer의 한계로 제대로 질문 및 답변을 받지 못했습니다.
이에 대한 link는 아래와 같습니다.
http://stackoverflow.com/questions/37874244/qt-c-library-installation-to-python35

설명은 위와 같구요. 문의드리고자 하는 것은 python에서 Qt module을 compile하여 import할 때,
도움을 받았으면 하는 것이구요. 아니면 힌트라도 얻을 수 있을까 해서요.
QHexEdit2 module의 example이나 설명을 보면 linux 환경에서 실행한 것이라서
본인과 같은 windows 환경과는 상황이 다른 것 같습니다.

혹시 도움을 주실 수 있으실 분이 계시면 사례할 수 있구요.
국내라면 오프라인으로 직접 방문도 할 수 있으니,
시간/장소에 불편을 느끼시지 않으셔도 됩니다.
관심있으신 분은 연락 부탁드립니다.

email : actis.oh@gmail.com

File attachments: 
첨부파일 크기
Image icon qhexedit2_python_setup.jpg84.09 KB
andysheep의 이미지


"fatal error C1083: Cannot open include file: 'QMetaType': No such file or directory"
message

QMetaType의 C++ 라이브러리랑 헤더 파일 설치해보세요.

올려준 이미지 파일 내용 보니 파이썬 모듈 만들려고 C/C++ 소스 코드 빌드하다가 에러 내는군요.
이런 경우에는 모듈만드는 소스 코드가 쓰는 C/C++ 라이브러리 까지 설치해야 됩니다.

Devuan 1.0 (Debian without systemd)
amd64 station: AMD FX(tm)-6100 Six-Core Processor, 8 GB memory, 1 TB HDD
amd64 laptop: HP Touchsmart

글쇠판: 세벌 최종식, 콜맥 (Colemak)

bluelukas의 이미지

예, 그렇지 않아도 "Qt5.6.0"이 설치된 상태입니다.

QMetaType으로 검색을 해보면
"C:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtCore" 에 "QMetaType.h"와 include내용이 있는 확장자 없는
"QMetaType"의 두 file이 검색됩니다. Qt Creator에서 setting을 해줘야 할까요?
이것 때문인지 몰라서 Qt Creator설치를 QHexEdit2 setup 설치순서를 앞뒤로 진행해 봤지만
현상은 변하지 않네요. Qt program에서 설정하는 것이 따로 있을까요?

메세지를 보면 "sipAPIqhexedit.h" line13의 "#include "이 문제라는 것인데,
Qt compiler option을 어디에 어떻게 설정해야 하는지 난감하네요.

andysheep의 이미지


QMetaType 정의한 헤더파일 경로 찾아서 아래 방식으로 지정해주면 될까요?

http://stackoverflow.com/questions/2752352/how-to-add-include-path-in-qt-creator#2752396

As explained in the Qt Creator Manual, must be an absolute path, but you can avoid OS-, host- or user-specific entries in your .pro file by using $$PWD which refers to the folder that contains your .pro file, e.g.

INCLUDEPATH += $$PWD/code/include

Devuan 1.0 (Debian without systemd)
amd64 station: AMD FX(tm)-6100 Six-Core Processor, 8 GB memory, 1 TB HDD
amd64 laptop: HP Touchsmart

글쇠판: 세벌 최종식, 콜맥 (Colemak)

bluelukas의 이미지

답변글을 보고 힌트를 얻었습니다. "includepath" 라는 keyword로 찾아보니,
"QHexEdit2-master\setup.py"에 "line89: # Used Qt libs" 항목이 Qt include directory를
지정하는 항목이네요. 아래 이에대한 구문입니다.
여기서, "include_dirs" 변수가 이에 해당하는 것으로 판단됩니다.
여러가지 시도 중 입니다만, 혹시 아래와 같을 때 path 설정하는 방법은 어떻게 해야
할까요? 여러모로 감사합니다.

include_dirs = ['src']
 
# Used Qt libs
if PyQt_Version == 'PyQt5':
    qt_libs = ["QtCore", "QtGui", "QtWidgets"]
else:
    qt_libs = ["QtCore", "QtGui"]
 
 
if cfg.qt_framework:
    for lib in qt_libs:
        include_dirs += [os.path.join(cfg.qt_lib_dir,lib + ".framework", "Headers")]
else:
    if PyQt_Version == 'PyQt5':
        for qt_inc_dir in ('/usr/include/qt', '/usr/include/qt5'):
            include_dirs.append(qt_inc_dir)
            include_dirs += [os.path.join(qt_inc_dir, lib) for lib in qt_libs]
        libraries = ["Qt5" + lib[2:] for lib in qt_libs]
    else:
        for qt_inc_dir in ('/usr/include/qt', '/usr/include/qt4'):
            include_dirs.append(qt_inc_dir)
            include_dirs += [os.path.join(qt_inc_dir, lib) for lib in qt_libs]
        libraries = ["Qt" + lib[2:] for lib in qt_libs]

댓글 첨부 파일: 
첨부파일 크기
Package icon setup.zip1.36 KB
bluelukas의 이미지

아래 코드와 같이 필요 include 구문 4줄을 직접 추가했구요.
결과로 첨부와 같이 link error상태로 상황이 변한상태입니다.
이것도 path 문제인지 확실치 않아 lib path 2줄을 추가했지만,
해결은 안된 상태입니다.

# Used Qt libs
if PyQt_Version == 'PyQt5':
    qt_libs = ["QtCore", "QtGui", "QtWidgets"]
else:
    qt_libs = ["QtCore", "QtGui"]
 
 
if cfg.qt_framework:
    for lib in qt_libs:
        include_dirs += [os.path.join(cfg.qt_lib_dir,
                                      lib + ".framework", "Headers")]
else:
    if PyQt_Version == 'PyQt5':
        for qt_inc_dir in ('/usr/include/qt', '/usr/include/qt5'):
            include_dirs.append(qt_inc_dir)
            include_dirs += [os.path.join(qt_inc_dir, lib) for lib in qt_libs]
        include_dirs.append("C:\\Qt\\5.6\\msvc2015_64\\include")
        include_dirs.append("C:\\Qt\\5.6\\msvc2015_64\\include\\QtCore")
        include_dirs.append("C:\\Qt\\5.6\\msvc2015_64\\include\\QtWidgets")
        include_dirs.append("C:\\Qt\\5.6\\msvc2015_64\\include\\QtGui")
        include_dirs.append("C:\\Qt\\5.6\\msvc2015_64\\lib")
        include_dirs.append("C:\\Qt\\5.6\\msvc2015_64\\lib\\cmake\\Qt5Core")
        libraries = ["Qt5" + lib[2:] for lib in qt_libs]
    else:
        for qt_inc_dir in ('/usr/include/qt', '/usr/include/qt4'):
            include_dirs.append(qt_inc_dir)
            include_dirs += [os.path.join(qt_inc_dir, lib) for lib in qt_libs]
        libraries = ["Qt" + lib[2:] for lib in qt_libs]

댓글 첨부 파일: 
첨부파일 크기
Image icon last_state.jpg158.21 KB
shint의 이미지

https://github.com/vilkov/qhexedit2

하루지나서.
오늘 이것저것 떼다붙이며 컴파일해보니. 성공했네요.
윈도우용입니다.

Windows10 32bit VS2015 Qt5.7.0

댓글 첨부 파일: 
첨부파일 크기
Package icon qhexeditor.zip34.88 KB

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

bluelukas의 이미지

github에 가보니 2012년 project네요.
본인이 문의드린 것은 "https://github.com/Simsys/qhexedit2" 2015년 project입니다.
좀 더 최신의 내용을 갖고 작업하는 것이 맞겠네요. 관심을 가져주셔서 감사합니다.
현상황을 설명하자면 C++ compile 자체가 문제된 것이 아니고, windows상 python에서
사용할 수 있도록 windows용 python library로 만드는 것이 안되고 있습니다.
github내용을 보면 linux에서는 python library로 만드는 것이 검증된 상태인 것 같아요.

shint의 이미지

별도움이 될지는 모르지만. qhexedit 를 포함하고 있습니다.

mdb vs sqlite 속도차이가 이렇게 많이 나나요?
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=83&MAEULNo=28&no=8009

DB Browser for SQLite
https://github.com/sqlitebrowser/sqlitebrowser

컴파일용 폴더 경로는 이렇습니다.
c:\Qt\sqlitebrowser
c:\dev\SQLite

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

andysheep의 이미지


LIBPATH에 Qt5Core.lib 디렉토리 넣어 보세요. linker가 이 라이브러리 파일만 찾으면 빌드할 겁니다.

You get an LNK1181 error in Visual Studio when the .lib or .obj files that are specified during linking are not found in the current directory, any of the directories that are specified by the LIBPATH linker option, or any of the directories that are specified in the LIB environment variable.

You may add the directory that contains libclamav.lib library file to the LIBPATH to resolve the problem (this instructions may vary a bit depending on your Visual Studio version):

In Solution Explorer, right-click the project, and then click Properties.
In the Property Pages dialog box, expand Linker, and then click General.
In the Additional Library Directories field, specify the path where libclamav.lib resides.

The error can also happen when the LIBPATH contains spaces. If that's the case, move the library to a path without spaces or put quotation marks around the path.

Devuan 1.0 (Debian without systemd)
amd64 station: AMD FX(tm)-6100 Six-Core Processor, 8 GB memory, 1 TB HDD
amd64 laptop: HP Touchsmart

글쇠판: 세벌 최종식, 콜맥 (Colemak)

bluelukas의 이미지

첨부와 같이 visual studio 2015 property manager에서 additional library directory를 수정했지만
해결은 안되었습니다. 더불어 동 dialog에 있는 option switch를 Yes/No로 바꿔가며 test했지만,
결과는 동일하네요.
현재는 sip(v4.18, python에서 C++ source를 compile하여 python module로 만드는 tool)에서
link path를 관장하고 있는 것 같아서 여기를 파고 있습니다. 쉽지 않네요.

댓글 첨부 파일: 
첨부파일 크기
Image icon libpath설정.png34.97 KB

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.