Как я могу связать другие файлы при использовании cx_freeze?
Я использую Python 2.6 и cx_Freeze 4.1.2 в системе Windows. Я создал setup.py для создания моего исполняемого файла, и все работает нормально.
При запуске cx_Freeze он перемещает все в каталог сборки. У меня есть другие файлы, которые я хотел бы включить в мой каталог. Как я могу это сделать? Здесь моя структура.
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='[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
)
]
)
Я не могу заставить это работать. Мне нужен файл MANIFEST.in?
Ответы
Ответ 1
Выяснил это.
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')]
)
Примечание:
-
include_files
должен содержать только "относительные пути к setup.py
script, иначе сборка завершится с ошибкой.
-
include_files
может быть списком строки i.e связки файлов с их относительными путями
или
-
include_files
может быть списком кортежей, в которых первая половина кортежа - это имя файла с абсолютным путем, а вторая половина - имя конечного файла с абсолютным путем.
(Когда возникает недостаток документации, проконсультируйтесь с Kermit the Frog)
Ответ 2
Там более сложный пример в http://wiki.wxpython.org/cx_freeze
Отсутствие документации по всем опциям находится на http://cx-freeze.sourceforge.net/cx_Freeze.html
С Cx_Freeze я все равно получаю вывод сборки из 11 файлов в одной папке, хотя, в отличие от Py2Exe.
Альтернативы: http://www.blog.pythonlibrary.org/category/packaging/
Ответ 3
Также вы можете создать отдельный script, который скопирует файлы после сборки. Это то, что я использую для восстановления приложения на окнах (у вас должно быть установлено "Утилиты GNU для win32", чтобы сделать "cp" работает).
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
Ответ 4
Чтобы найти прикрепленные файлы (include_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)
См. cx-freeze: использование файлов данных