파이썬 Distutils에서 Data(아이콘 등) 배포 방식을 어떻게 해야 하나요?

bluekyu의 이미지

안녕하세요. 파이썬으로 만든 프로그램을 배포하려고 distutils를 계속 다뤄보고 있는데, data(아이콘, 플러그인 등) 쪽에서 해결되지 않는 부분이 있어서 질문 올립니다.

모듈 및 패키지 부분은 플랫폼에 관계 없이 lib 아래에 설치가 잘 되고, 스크립트도 일반적으로 잘 설치가 됩니다.

그런데 data 부분은 딱히 표준이라는 것이 없이 개발자 마음대로 설치가 가능한 것 같습니다.

리눅스에서 개발을 하고 있어서, data 에 대한 설치 경로를 share/my_program 아래에 두게 되면, 리눅스에서는 /usr/local/share/my_program으로 설치는 잘 됩니다.

하지만 윈도우즈 설치에서는 c:\Program Files\my_program 폴더 아래로 설치되기를 원하는데, c:\python32\share\my_program 아래로 설치가 되네요.

리눅스와 윈도우즈를 구분해서 설치 경로를 지정해주면 되기는 하는데, 이렇게 되면 맥에서도 설치를 하고 싶으면 따로 경로를 지정해줘야 하기 때문에 깔끔한 해결법이 아닌 것 같습니다.

혹시 이에 대한 다른 해결법이 있는 지 알고 싶습니다.

그리고 위와 같이 설치를 경로를 지정해줄 수는 있는데, 다른 문제로 개발 시의 파일 경로와 설치 후의 파일 경로가 다르게 되는데, 이렇게 되면 파이썬에 파일 위치를 찾을 때 경로가 달라져서 찾지를 못하게 됩니다.

이를 해결하려면 설치 시에, 파일 위치를 찾는 경로에 대해서 모두 수정을 해주어야 하는데, 이 역시 적절한 해결법은 아니라고 생각이 듭니다. 이에 대해서도 해결 방법이 있을까요?

답변 부탁드립니다.

익명 사용자의 이미지

1. 꼭 distutils를 써야하는게 아니라면 그것을 확장한 setuptools, 혹은 그보다 더 확장한 distrubute를 사용해보시는건 어떨지.

2. 설치본을 (distutils/setuptools/distribute를 써서) 파이썬 egg 패키지로 만드시려는 거라면, .py 파일들을 포함해서 데이터 파일들이 파이썬 디렉토리에 설치되는건 당연하고 자연스러워 보입니다.

근데 그게 아니라 프로그램과 부속 데이터파일들이 Program Files에 설치되는 형태를 원한다면, distutils/setuptools/distribute가 제공하는 기능이 아니라 아마도 윈도우 인스톨러를 사용하는 방식으로 새로 만드셔야 할 것 같네요.

익명 사용자의 이미지

덧붙여 패키지의 데이터 파일도 setup.py에서 설정 가능합니다. 다음 링크를 참조하세요:

http://peak.telecommunity.com/DevCenter/setuptools#including-data-files

패키지에 포함된 데이터 파일에 접근하는 건 다음을 참조하세요:

http://peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resources

bluekyu의 이미지

답변 감사합니다. 프로그램과 부속 데이터 파일 방식이라서 데이터 파일이 패키지 폴더 아래에 들어가는 것은 가능하면 피하고자 합니다.

특이한 것은 리눅스는 setup.py 로 설정하기 참 쉬운데, 윈도우즈만 어렵네요.

아마도 윈도우즈 쪽은 py2exe 나 다른 패키징 프로그램을 사용하는 것이 나을 것 같습니다.
(다만, 문제는 파이썬 3 지원이 대부분 잘 안되는 걸로 알고 있습니다...)

그리고 PyQt를 사용하고 있어서, 일단은 qt resource 시스템을 이용해서 대체 방법을 사용하고 있습니다.
(Qt 배포 방식을 찾다가 알게 되었습니다. Qt Resource 시스템이 하나의 바이너리 파일에 데이터 파일을 압축시키는 특이한 방법을 사용하더군요.)

어쨌든 답변 감사합니다.

/*** Signature ******************
* blog: http://blog.bluekyu.me/ *
********************************/

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.