Как я могу объединить другие файлы при использовании cx_freeze?
Вопрос
Я использую Python 2.6 и cx_Freeze 4.1.2 в системе Windows.Я создал setup.py для сборки моего исполняемого файла, и все работает нормально.
Когда запускается cx_Freeze, он перемещает все в build
справочник.У меня есть несколько других файлов, которые я хотел бы включить в мой build
справочник.Как я могу это сделать?Вот моя структура:
src\
setup.py
janitor.py
README.txt
CHNAGELOG.txt
helpers\
uncompress\
unRAR.exe
unzip.exe
Вот мой фрагмент:
настройка
( name='Janitor', version='1.0', description='Janitor', author='John Doe', author_email='john.doe@gmail.com', 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 ) ] )
Кажется, я не могу заставить это сработать.Нужен ли мне MANIFEST.in
файл?
Решение
Разобрался в этом.
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 = 'le...@null.com',
options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [Executable('janitor.py')]
)
Примечание:
include_files
должен содержать "только" относительные пути кsetup.py
сценарий, в противном случае сборка завершится неудачей.include_files
может быть списком строк, то есть набором файлов с их относительными путями
илиinclude_files
может представлять собой список кортежей, в котором первая половина кортежа - это имя файла с абсолютным путем, а вторая половина - это имя файла назначения с абсолютным путем.
(При возникновении недостатка документации обратитесь к Лягушонку Кермиту)
Другие советы
Есть более сложный пример на: cx_freeze - wxPyWiki
Недостающая документация по всем опциям находится по адресу: cx_Freeze (интернет-архив)
С cx_Freeze
, Однако я по-прежнему получаю результат сборки из 11 файлов в одной папке, в отличие от Py2Exe
.
Альтернативы: Упаковка | The Mouse Vs.Питон
Для того, чтобы найти ваши прикрепленные файлы (include_files = [-> your attached files <-]
) вы должны вставить следующую функцию в ваш код setup.py :
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)
Также вы можете создать отдельный скрипт, который будет копировать файлы после сборки.Это то, что я использую для перестройки приложения в Windows (у вас должны быть установлены "GNU utilities for win32", чтобы "cp" работал).
build.летучая мышь:
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