2010-03-31 63 views
48

Tôi đang sử dụng Python 2.6 và cx_Freeze 4.1.2 trên hệ thống Windows. Tôi đã tạo setup.py để xây dựng tệp thực thi của mình và mọi thứ hoạt động tốt.Tôi có thể gộp các tệp khác như thế nào khi sử dụng cx_freeze?

Khi cx_Freeze chạy nó sẽ di chuyển mọi thứ vào thư mục xây dựng. Tôi có một số tập tin khác mà tôi muốn bao gồm trong thư mục xây dựng của tôi. Tôi có thể làm cái này như thế nào? Đây là cấu trúc của tôi.

src\ 
    setup.py 
    janitor.py 
    README.txt 
    CHNAGELOG.txt 
    helpers\ 
     uncompress\ 
      unRAR.exe 
      unzip.exe 

Dưới đây là đoạn mã của tôi:

thiết lập

(name='Janitor', 
    version='1.0', 
    description='Janitor', 
    author='John Doe', 
    author_email='[email protected]', 
    url='http://www.this-page-intentionally-left-blank.org/', 
    data_files = 
     [ ('helpers\uncompress', ['helpers\uncompress\unzip.exe']), 
     ('helpers\uncompress', ['helpers\uncompress\unRAR.exe']), 
     ('', ['README.txt']) 
     ], 
    executables = 
     [ 
     Executable\ 
      (
      'janitor.py', #initScript 
     ) 
     ] 
) 

tôi dường như không thể có được điều này để làm việc. Tôi có cần tệp MANIFEST.in không?

Trả lời

92

Đã tìm ra.

from cx_Freeze import setup,Executable 

includefiles = ['README.txt', 'CHANGELOG.txt', 'helpers\uncompress\unRAR.exe', , 'helpers\uncompress\unzip.exe'] 
includes = [] 
excludes = ['Tkinter'] 
packages = ['do','khh'] 

setup(
    name = 'myapp', 
    version = '0.1', 
    description = 'A general enhancement utility', 
    author = 'lenin', 
    author_email = '[email protected]', 
    options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}}, 
    executables = [Executable('janitor.py')] 
) 

Lưu ý:

  • include_files phải chứa "chỉ" đường dẫn tương đối so với setup.py kịch bản khác xây dựng sẽ thất bại.
  • include_files có thể là một danh sách các chuỗi tức là một loạt các file với đường dẫn tương đối của họ
    hoặc
  • include_files có thể là một danh sách các bản ghi trong đó một nửa đầu tiên của tuple là tên tập tin với đường dẫn tuyệt đối và nửa thứ hai là tên tệp đích với đường dẫn tuyệt đối.

(Khi thiếu các tài liệu phát sinh, tham khảo ý kiến ​​Kermit the Frog)

+2

đẹp công việc. Ước gì tôi có thể cung cấp cho bạn một số phiếu bầu! –

+0

Cảm ơn Craig. Tôi đã thử tham gia danh sách gửi thư mà bạn đang ở nhưng tôi không được phép. Bạn có thể giúp tôi không? Có thể chỉ định thư mục đích không? tùy chọn 'include_files' chỉ đơn giản là tạo ra cùng một cấu trúc thư mục trong thư mục builds và kết xuất các tệp được bao gồm ở đó. Cảm ơn. –

+2

Giải quyết vấn đề này. Tôi đã đi qua nguồn. Đó là một điều đáng tiếc có chức năng như không có tài liệu đủ tốt. Tôi rất muốn giúp viết một số tài liệu cho việc này. –

6

Có một ví dụ phức tạp hơn tại http://wiki.wxpython.org/cx_freeze Các tài liệu thiếu của tất cả các tùy chọn là http://cx-freeze.sourceforge.net/cx_Freeze.html

Với Cx_Freeze tôi vẫn nhận được một đầu ra xây dựng của 11 tập tin trong một thư mục duy nhất, tuy nhiên, không giống như với Py2Exe.

Lựa chọn thay thế: http://www.blog.pythonlibrary.org/category/packaging/

+0

cx_freeze sẽ không bao giờ hỗ trợ tệp .exe đơn như dev cảm thấy rằng 'hacks' được sử dụng để làm một thứ như vậy không sạch. Nếu bạn muốn một tập tin duy nhất thì bạn sẽ phải gắn bó với Py2exe, đây là [yêu cầu tính năng hỗ trợ Python3] (http://sourceforge.net/p/py2exe/feature-requests/20/). – dotancohen

+0

liên kết của bạn đến tài liệu bị mất hiện đã chết. Nếu bạn vẫn còn sử dụng trang web này, tôi sẽ yêu mũi trỏ đến tài liệu trên các tùy chọn vì tôi sắp sửa viết tắt trên chúng –

+0

J.F. Sebastian đã sửa liên kết tài liệu thành bản sao lưu trữ. [Trang hiện tại] (http://cx-freeze.readthedocs.io/en/latest/distutils.html) dường như có ít thông tin hơn. –

1

Ngoài ra, bạn có thể tạo tập lệnh riêng sẽ sao chép tệp sau khi tạo. Đó là những gì tôi sử dụng để xây dựng lại các ứng dụng trên cửa sổ (bạn nên có "GNU tiện ích cho win32" được cài đặt để làm cho "cp" hoạt động).

build.bat:

cd . 
del build\*.* /Q 
python setup.py build 
cp -r icons build/exe.win32-2.7/ 
cp -r interfaces build/exe.win32-2.7/ 
cp -r licenses build/exe.win32-2.7/ 
cp -r locale build/exe.win32-2.7/ 
pause 
1

Để tìm các file đính kèm của bạn (include_files = [-> your attached files <-]), bạn nên chèn hàm sau trong mã setup.py của bạn:

def find_data_file(filename): 
    if getattr(sys, 'frozen', False): 
     # The application is frozen 
     datadir = os.path.dirname(sys.executable) 
    else: 
     # The application is not frozen 
     # Change this bit to match where you store your data files: 
     datadir = os.path.dirname(__file__) 

    return os.path.join(datadir, filename) 

See cx-freeze: using data files

Các vấn đề liên quan