Metadata-Version: 2.0
Name: subzero
Version: 0.2.4
Summary: PyInstaller setuptools integration
Home-page: https://github.com/xoviat/subzero
Author: Mars Galactic
Author-email: xoviat@users.noreply.github.com
License: GNU GENERAL PUBLIC LICENSE
Keywords: pyinstaller
Platform: any
Requires-Dist: PyInstaller
Requires-Dist: PyRTF3 (>=0.47.3)
Requires-Dist: deepmerge
Requires-Dist: packaging
Requires-Dist: pipdeptree
Requires-Dist: pyspin
Requires-Dist: contextlib2; python_version < "3.4"
Requires-Dist: pathlib; python_version < "3.4"
Requires-Dist: glob2; python_version < "3.5"
Requires-Dist: pywix (>=0.2); sys_platform == "win32"

subzero
=======

|Codacy Badge| |build status| |Codecov|

What is Subzero?
----------------

The goal of subzero is to allow simple and rapid deployment of
`frozen <http://docs.python-guide.org/en/latest/shipping/freezing/>`__
Python applications with minimal additional effort and developer time.
In contrast to other solutions, subzero’s philosophy is that having a
working application, quickly is more important than optimizing for size
or other factors and that generating your end product (be it an MSI, or
other installer) should take only a few minutes to set up. Subzero
builds on the extensive development work of other projects, and doesn’t
re-invent the wheel. Rather, it ties everything together in a simple and
intuitive manner.

How do I use it?
----------------

In your setup file, replace the default setup import with the followng:

.. code:: python

    from subzero import setup, Executable

Then run the following command:

::

    python setup.py bdist_msi

Subzero will the build executables specified in the ``entry_points`` and
``scripts`` sections and then create an installer that contains those
executables.

Example
-------

.. code:: python

    setup(
        name='Name',
        author='Author',
        packages=find_packages(),
        version=versioneer.get_version(),
        cmdclass=versioneer.get_cmdclass(),
        install_requires=[
            'paramiko',
        ],
        entry_points={
            'gui_scripts': [
                Executable(
                        'gui = app.__main__:gui',
                        icon_file='Icon.ico'),
            ],
            'console_scripts': [
                'console = app.__main__:console',
            ],
        },
        options={
            'build_exe': {
                'pathex':
                [os.path.join(os.path.dirname(PyQt5.__file__), 'Qt', 'bin')],
                'datas':
                [datafile, '.')],
            },
            'bdist_msi': {
                'upgrade_code': '84b31ed7-3985-46ad-9d07-eb4140a6d44a',
                'shortcuts': ['My Program = gui'],
                'wix_template_dir': os.path.abspath('./wix_templates'),
            }
        })

Options are applied first globally from the options dictionary passed to
``setup``, and then for each executable if the ``Executable`` class is
present for that particular ``entry_point`` or ``script``.

The full array of options for build\_exe is available in the PyInstaller
documentation. Providing an upgrade code is **strongly recommended** for
the bdist\_msi command. A license agreement will be added to the
installer if there is a license text file in the same directory as
setup.py.

Extended import discovery (In beta)
-----------------------------------

In case PyInstaller cannot discover all of your dependencies, you can
set ``optimize_imports=False``, as shown below. This option may discover
certain imports previously not found but it may also make your
application larger. Note that you must add your package requirements in
``install_requires`` for this option to work!

.. code:: python

        'build_exe': {
            'optimize_imports': False
        },

Cython
------

Cython modules can also be built because Subzero executes the builtin
``build`` command before calling PyInstaller. Just add your modules to
the ``ext_modules`` key:

.. code:: python

    from setuptools import find_packages, Extension
    from subzero import setup

    setup(
        name='hello_world',
        ext_modules=[
            Extension(
                'my_module',
                sources=['my_module.pyx'],
            )
        ])

.. |Codacy Badge| image:: https://api.codacy.com/project/badge/Grade/1568bcb5178b4e4d80dae7840df03f08
   :target: https://www.codacy.com/app/pywin32/subzero?utm_source=github.com&utm_medium=referral&utm_content=xoviat/subzero&utm_campaign=badger
.. |build status| image:: https://ci.appveyor.com/api/projects/status/github/xoviat/subzero?branch=master&svg=true
   :target: https://ci.appveyor.com/project/xoviat/pyinstaller-utils
.. |Codecov| image:: https://img.shields.io/codecov/c/github/xoviat/subzero.svg?style=flat
   :target: https://codecov.io/gh/xoviat/subzero

