web-dev-qa-db-fra.com

Comment puis-je regrouper d'autres fichiers lors de l'utilisation de cx_freeze?

J'utilise Python 2.6 et cx_Freeze 4.1.2 sur un système Windows. J'ai créé le setup.py pour construire mon exécutable et tout fonctionne bien.

Lorsque cx_Freeze s'exécute, il déplace tout vers le répertoire build. J'ai d'autres fichiers que j'aimerais inclure dans mon répertoire build. Comment puis-je faire ceci? Voici ma structure:

src\
    setup.py
    janitor.py
    README.txt
    CHNAGELOG.txt
    helpers\
        uncompress\
            unRAR.exe
            unzip.exe

Voici mon extrait:

installer

( 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
          )
      ]
)

Je n'arrive pas à faire fonctionner ça. Ai-je besoin d'un MANIFEST.in fichier?

52
Mridang Agarwalla

Deviner.

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')]
)

Remarque:

  • include_files doit contenir "uniquement" des chemins relatifs vers setup.py script sinon la construction échouera.
  • include_files peut être une liste de chaînes, c'est-à-dire un tas de fichiers avec leurs chemins d'accès relatifs
    ou
  • include_files peut être une liste de tuples dans laquelle la première moitié du Tuple est le nom du fichier avec le chemin absolu et la seconde moitié est le nom du fichier de destination avec le chemin absolu.

(En cas de manque de documentation, consultez Kermit la grenouille)

105

Il y a un exemple plus complexe à: cx_freeze - wxPyWiki

La documentation manquante de toutes les options est à: cx_Freeze (Internet Archive)

Avec cx_Freeze, J'ai toujours une sortie de build de 11 fichiers dans un seul dossier, contrairement à Py2Exe.

Alternatives: Emballage | La souris contre Python

6
Cees Timmerman

Pour trouver vos fichiers joints (include_files = [-> your attached files <-]), vous devez insérer la fonction suivante dans votre code 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)

Voir cx-freeze: utilisation de fichiers de données

2
Tiffy

Vous pouvez également créer un script séparé qui copiera les fichiers après la génération. C'est ce que j'utilise pour reconstruire l'application sur Windows (vous devriez avoir "GNU utilities for win32" installé pour que "cp" fonctionne).

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
greene