Question

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 fonctionne, il se déplace tout au répertoire build. J'ai d'autres fichiers que je souhaite 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:

  

Configuration

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

Je ne peux pas sembler obtenir ce travail. Ai-je besoin d'un fichier MANIFEST.in?

Était-ce utile?

La solution

figured it out.

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

Note:

  • include_files doit contenir « seulement » des chemins relatifs au script setup.py autre la construction échouera.
  • include_files peut être une liste de chaînes i.e. un tas de fichiers avec leurs chemins relatifs
    ou
  • include_files peut être une liste de tuples dans lequel 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.

(Lorsque l'absence de la documentation se pose, consultez Kermit la grenouille)

Autres conseils

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

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

Avec cx_Freeze, je reçois encore une sortie de construction de 11 fichiers dans un seul dossier, bien que, contrairement à Py2Exe.

Alternatives: Packaging | La souris Vs. Python

Pour trouver vos fichiers joints (de 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-gel: l'utilisation des fichiers de données

Vous pouvez également créer script séparé qui copie des fichiers après la construction. Il est ce que j'utilise pour reconstruire l'application sur Windows (vous devriez avoir « utilitaires GNU pour win32 » installés pour faire « 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top