Как я могу связать другие файлы при использовании 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)

Ответ 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: использование файлов данных