How can I bundle other files when using cx_freeze?

I’m using Python 2.6 and cx_Freeze 4.1.2 on a Windows system. I’ve created the setup.py to build my executable and everything works fine.

When cx_Freeze runs, it moves everything to the build directory. I have some other files that I would like included in my build directory. How can I do this? Here’s my structure:

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

Here’s my snippet:

setup

( name='Janitor',
  version='1.0',
  description='Janitor',
  author='John Doe',
  author_email='<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6d07020503430902082d0a000c0401430e0200">[email protected]</a>',
  url='http://www.this-page-intentionally-left-blank.org/',
  data_files = 
      [ ('helpersuncompress', ['helpersuncompressunzip.exe']),
        ('helpersuncompress', ['helpersuncompressunRAR.exe']),
        ('', ['README.txt'])
      ],
  executables =
      [
      Executable
          (
          'janitor.py', #initScript
          )
      ]
)

I can’t seem to get this to work. Do I need a MANIFEST.in file?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Figured it out.

from cx_Freeze import setup,Executable

includefiles = ['README.txt', 'CHANGELOG.txt', 'helpersuncompressunRAR.exe', , 'helpersuncompressunzip.exe']
includes = []
excludes = ['Tkinter']
packages = ['do','khh']

setup(
    name = 'myapp',
    version = '0.1',
    description = 'A general enhancement utility',
    author = 'lenin',
    author_email = '<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6e020b4040402e001b0202400d0103">[email protected]</a>',
    options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}}, 
    executables = [Executable('janitor.py')]
)

Note:

  • include_files must contain “only” relative paths to the setup.py script else the build will fail.
  • include_files can be a list of string i.e a bunch of files with their relative paths
    or
  • include_files can be a list of tuples in which the first half of the tuple is the file name with the absolute path and the second half is the destination filename with the absolute path.

(When the lack of the documentation arises, consult Kermit the Frog)

Method 2

There’s a more complex example at: cx_freeze – wxPyWiki

The lacking documentation of all the options is at: cx_Freeze (Internet Archive)

With cx_Freeze, I still get a build output of 11 files in a single folder, though, unlike with Py2Exe.

Alternatives: Packaging | The Mouse Vs. Python

Method 3

Also you can create separate script that will copy files after the build. It’s what I use to rebuild the app on windows (you should have “GNU utilities for win32” installed to make “cp” works).

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

Method 4

In order to find your attached files (include_files = [-> your attached files <-]) you should insert the following function in your setup.py code:

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


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x