2012-05-21 24 views
5

Tôi đã viết một ứng dụng web đơn giản với máy chủ web nhúng (lốc xoáy), cơ sở dữ liệu (sqlalchemy sử dụng sqlite bây giờ), và toàn bộ shabang. Tôi muốn gói tất cả thành một thư mục độc lập với một exe duy nhất có thể chạy. Kịch bản triển khai hoàn toàn yêu cầu một cú nhấp chuột cài đặt và chạy như thế này.pyinstaller với cấu trúc thư mục không tầm thường

Tôi đã hoàn toàn thất bại khi cố gắng lấy py2exe hoặc pyinstaller để kết hợp mã của tôi. Vấn đề đã trực tiếp làm với cấu trúc thư mục và bố trí, đó là như sau. Tôi không muốn thay đổi bố cục thư mục thành nhiều. Ai đó có thể đề nghị làm thế nào tôi có thể nhận được điều này với một trong hai py2exe hoặc pyinstaller hoặc bất kỳ công cụ phù hợp khác?

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

Bạn có thể cung cấp mã bạn đã cố gắng? – jadkik94

+0

Vấn đề gì khi bạn thử? Một số tệp bị thiếu? –

+0

Janne, tôi gặp sự cố bao gồm các thư mục tĩnh của tôi - glob chỉ sao chép các tệp trong một thư mục nhất định. Để tạo các thư mục mới dưới static/tôi phải chỉ định các mục bổ sung trong đặc tả data_files của mình. – Karra

Trả lời

6

Vâng, xin lỗi để trả lời câu hỏi của riêng tôi. Nhưng nhiều googling và thử và sai, tôi quản lý để có được điều này làm việc. Tôi dán setup.py của tôi (cho py2exe) dưới đây cho bất cứ ai có vấn đề tương tự nhận được lốc xoáy + sqlalchemy + sqlite làm việc với py2exe. Khi tôi chạy python setup.py py2exe, dòng cuối cùng đề cập đến một số module bị thiếu. Nhưng điều này không ảnh hưởng đến việc thực hiện chương trình.

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

Đây là setup.py của tôi:

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, 
    )