2012-05-21 3 views
5

웹 서버 (토네이도)가 내장 된 간단한 웹 응용 프로그램, 데이터베이스 (지금은 sqlite를 사용하는 sqlalchemy) 및 전체 shabang을 작성했습니다. 나는 실행할 수있는 하나의 exe를 가진 하나의 독립적 인 디렉토리에이 모든 것을 묶어 넣고 싶다. 배포 시나리오에서는 꼭 한 번의 클릭으로 설치하고 실행해야합니다.평범하지 않은 디렉토리 구조자를 사용하는 pyinstaller

저는 py2exe 또는 pyinstaller를 사용하여 코드를 묶는 데 실패했습니다. 이 문제는 디렉토리 구조 및 레이아웃과 직접 관련이 있습니다. 다음과 같습니다. 나는 디렉토리 레이아웃을 많이 바꾸고 싶지 않다. 누군가 py2exe 나 pyinstaller 또는 다른 적절한 도구로 어떻게 이것을 얻을 수 있는지 제안 할 수 있습니까?

project/ 
|-> main.py 

|-> libs/ 
    |-> tornado/ (The full git rep as a submodule) 
     |-> tornado/ (The actual package) 
    |-> sqlalchemy/ 

|-> src/ 
    |-> support-1.py 
    |-> support-2.py 

|-> static/ 
    -> js/ 
    -> img/ 
    -> css/ 

|-> templates/ 
+1

당신이 시도 코드를 제공 할 수 있습니다 : 여기

> "['Carbon', 'Carbon.Files', '_curses', '_scproxy', 'django.utils', > 'dummy.Process', 'pkg_resources', 'pysqlite2', 'simplejson', > 'sqlalchemy.cprocessors', 'sqlalchemy.cresultproxy', 'tornado.epoll']" 

내 setup.py입니까? – jadkik94

+0

시도했을 때의 문제점은 무엇입니까? 파일이 누락 되었습니까? –

+0

Janne, 정적 디렉토리를 포함하는 데 문제가있었습니다. glob은 주어진 디렉토리의 파일 만 복사했습니다. 정적 아래에 새 디렉토리를 만들려면/내 data_files 사양에 추가 항목을 지정해야했습니다. – Karra

답변

6

글쎄, 내 자신의 질문에 대답 해 주셔서 감사합니다. 그러나 많은 인터넷 검색과 시행 착오, 나는이 일을 할 수 있었다. 나는 비슷한 문제가 토네이도 + sqlalchemy + sqlite py2exe에서 작동하는 사람은 누구나 내 setup.py (py2exe)에 대한 붙여 넣기 오전. 파이썬 setup.py py2exe를 실행할 때 마지막 줄에 일부 모듈이 없다는 내용이 나와 있습니다. 그러나 이것은 프로그램 실행에 아무런 영향을주지 않았습니다.

import glob, os, sys 

curr_dir = os.path.abspath('.') 
pare_dir = os.path.abspath('..') 

sys.path = [os.path.join(pare_dir, 'py2exe-0.6.9', 'py2exe'), 
      os.path.join(curr_dir, 'src'), 
      os.path.join(curr_dir, 'libs', 'tornado'), 
      os.path.join(curr_dir, 'libs', 'sqlalchemy'), 
      os.path.join(curr_dir, 'libs')] + sys.path 


from distutils.core import setup 
import py2exe 

data_files = [('', ['config.json']), 
       ('db', ['db/prs.db']), 
       ('templates',  glob.glob('templates/*.*')), 
       ('static',   glob.glob('static/*.* ')), 
       ('static/css',  glob.glob('static/css/*.*')), 
       ('static/js',  glob.glob('static/js/*.*')), 
       ('static/js/libs', glob.glob('static/js/libs/*.*')), 
       ('static/img',  glob.glob('static/img/*.*')), 
       ] 

setup(console=['prs.py'], options={ 
    'py2exe' : { 
     'includes' : ['demjson'], 
     'packages' : ['sqlalchemy.dialects.sqlite'], 
     }}, 
    data_files=data_files, 
    )