2010-03-31 2 views
48

Я использую Python 2.6 и cx_Freeze 4.1.2 в системе Windows. Я создал setup.py для создания моего исполняемого файла, и все работает нормально.Как я могу связать другие файлы при использовании cx_freeze?

Когда 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?

ответ

92

Понял.

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 сценария еще сборки не удастся.
  • include_files может быть список строки т.е. кучу файлов с их относительными путями
    или
  • include_files может быть список кортежей, в котором первая половина кортежа это имя файла с абсолютным путем и вторая половина - имя файла назначения с абсолютным путем.

(Когда возникает нехватка документации, консультация лягушонок Кермит)

+2

Nice Работа. Хотел бы я дать вам несколько голосов! –

+0

Спасибо Крейг. Я попытался присоединиться к списку рассылки, в котором вы находитесь, но я не был допущен. Не могли бы вы мне помочь? Можно ли указать каталог назначения? опция 'include_files' просто создала ту же структуру каталогов в каталоге builds и выгружает туда включенные файлы. Благодарю. –

+2

Решил это тоже. Я прошел через источник. Жаль, что такие функции, как, например, недостаточно хорошо документированы. Я хотел бы помочь написать для этого документацию. –

6

Там это более сложный пример, в 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/

+0

cx_freeze никогда не будет поддерживать однофакторный .exe-файл, поскольку разработчик чувствует, что «хаки», используемые для этого, не чисты. Если вам нужен один файл, вам придется придерживаться Py2exe, здесь [запрос функции поддержки Python3] (http://sourceforge.net/p/py2exe/feature-requests/20/). – dotancohen

+0

Ваша ссылка на отсутствующую документацию теперь мертва. Если вы все еще используете этот сайт, я бы предпочел бы указатель на документы на параметры, так как я скоро на них нахожу –

+0

J.F. Себастьян зафиксировал ссылку документа на архивированную копию. [Текущая страница] (http://cx-freeze.readthedocs.io/en/latest/distutils.html), похоже, меньше информации. –

1

Также вы можете создать отдельный скрипт, который будет копировать файлы после сборки. Это то, что я использую, чтобы перестроить приложение на окнах (у вас должно быть установлено «Утилиты 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 
1

Для того, чтобы найти прикрепленные файлы (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) 

See cx-freeze: using data files