Metadata-Version: 2.0
Name: subzero
Version: 0.2.2
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
Requires-Dist: contextlib2
Requires-Dist: packaging
Requires-Dist: pathlib
Requires-Dist: pipdeptree
Requires-Dist: pywix

subzero
=======

|build status| |Codecov|

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

Subzero allows you to rapidly deploy your
`frozen <http://docs.python-guide.org/en/latest/shipping/freezing/>`__
Python application with minimal effort and additional code. Subzero does
this by providing a simple and intuitive wrapper for PyInstaller coupled
with an MSI builder. With a few lines of code and a single command, you
can go directly from Python code to a compiled MSI installer.

How do I install it?
--------------------

::

    pip install subzero

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

That's it! PyInstaller will build all of the entry points and scripts
specified in your executable.

How do I specify options?
-------------------------

In your setup function, you can specify PyInstaller options as follows:

.. code:: python

      setup(...
            options={
    '         build_exe': {
                  'hiddenimports': [],
                  'pathex': [],
                  'datas': [],
              },
              'bdist_msi': {
                  'upgrade_code': '{66620F3A-DC3A-11E2-B341-002219E9B01E}',
                  'shortcuts': [
                      'ProgramMenuFolder\Hello World = my_project'
                  ],
              }
      ...)

In addition, options can be specified on a per-executable basis
replacing each script or entry point with an instance of the Executable
class and initializing it with the required options, as shown below:

.. code:: python

    setup(...
          entry_points={
              'console_scripts': [
                  'my_project = hello_world.__main__:main',
                  Executable('gui = hello_world.__main__:gui', icon_file='Sample.ico', windowed=False),
              ]
          },
    ...)

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.

.. code:: python

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

Cython (currently not in tests)
-------------------------------

Cython modules can also be built because Subzero executes the builtin
``build`` command before calling PyInstaller. The following is an
example setup.py file for a Cython project:

.. code:: python

    from setuptools import find_packages, Extension
    from subzero import setup

    setup(
        name='hello_world',
        author='test_author',
        version='0.1.0',
        packages=find_packages(),
        entry_points={
          'console_scripts': [
              'my_project = hello_world.__main__:main',
          ]
        },
        options={},
        install_requires=[],
        setup_requires=[
            'setuptools>=18.0',
            'cython',
        ],
        ext_modules=[
            Extension(
                'my_module',
                sources=['my_module.pyx'],
            )
        ])

.. |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

