Pregunta

Estoy usando Python 2.6 y 4.1.2 cx_Freeze en un sistema Windows. He creado el setup.py para construir mi bien ejecutable y todo funciona.

Cuando cx_Freeze corre, se mueve todo en el directorio build. Tengo algunos otros ficheros que me gustaría incluir en mi directorio build. ¿Cómo puedo hacer esto? Aquí está mi estructura:

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

Aquí está mi fragmento:

  

configuración

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

Me parece que no puede conseguir que esto funcione. ¿Es necesario un archivo MANIFEST.in?

¿Fue útil?

Solución

descubierto.

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

Nota:

  • include_files debe contener "sólo" las rutas relativas a la secuencia de comandos setup.py de lo contrario la construcción fallará.
  • include_files puede ser una lista de cuerda es decir un montón de archivos con sus rutas relativas
    o
  • include_files puede ser una lista de tuplas en el que la primera mitad de la tupla es el nombre del archivo con la ruta absoluta y la segunda mitad es el nombre del archivo de destino por la ruta absoluta.

(Cuando la falta de la documentación surge, consultar la Rana René)

Otros consejos

Hay un ejemplo más complejo en: cx_Freeze - wxPyWiki

La documentación que carece de todas las opciones se encuentra en: cx_Freeze (Internet Archive)

Con cx_Freeze, sigo teniendo una salida de acumulación de 11 archivos en una sola carpeta, sin embargo, a diferencia de Py2Exe.

Alternativas: y software | El ratón vs. Python

Con el fin de encontrar los archivos adjuntos (include_files = [-> your attached files <-]) se debe insertar la siguiente función en el código 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)

Ver CX-congelante: utilizar archivos de datos

También puede crear secuencia de comandos independiente que copiará los archivos después de la construcción. Es lo que yo uso para reconstruir la aplicación en ventanas (que debe tener "utilidades GNU para Win32" instaladas para hacer obras "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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top