كيف يمكنني تجميع الملفات الأخرى عند استخدام 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
يمكن أن تكون قائمة من tuples حيث النصف الأول من tuple هو اسم الملف مع المسار المطلق والنصف الثاني هو اسم الملف الوجهة مع المسار المطلق.
(عندما ينشأ نقص الوثائق ، استشر Kermit The Frog)
نصائح أخرى
هناك مثال أكثر تعقيدًا على: CX_FREEZE - WXPYWIKI
إن توثيق جميع الخيارات في: cx_freeze (أرشيف الإنترنت)
مع cx_Freeze
, ، ما زلت أحصل على إخراج بني 11 ملفًا في مجلد واحد ، على عكس مع ذلك Py2Exe
.
البدائل: التغليف | الماوس مقابل. بيثون
من أجل العثور على ملفاتك المرفقة (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.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