Generate standalone python applications.
Project description
GravityBee helps you generate standalone Python applications.
GravityBee is targeted at python programs that are already packaged in the standard setuptools way.
These are some benefits of a GravityBee standalone application:
You end up with one file that contains everything.
Your user does not need to install Python or any packages.
You build separate natively executable applications for each of your target platforms.
GravityBee depends on Pyppyn and PyInstaller and is subject to their limitations.
To Build A Standalone Application
Step 1 - Install
You must install the application you wish to build (e.g., yoursuperapp), as well as GravityBee.
$ pip install yoursuperapp gravitybee
The process will also work fine if you’re installing from a local version of your app.
$ cd yoursuperapp
$ ls setup*
setup.cfg setup.py
$ pip install --editable .
$ pip install gravitybee
Step 2 - Provide (or gather) information
GravityBee will assume all necessary information when run. However, you may wish to override the assumed values. You can provide values either through environment variables or command line flags. If both are provided, command line flags take precedence.
Options:
ENV VAR |
CL Options |
Desciption |
---|---|---|
GB_APP_NAME |
–app-name, -a |
The name that will appear as part of the final standalone application name. Default: name from setup.py and/or setup.cfg. |
GB_PKG_NAME |
–pkg-name, -n |
The package name for the application you are building. Default: First value in packages from setup.py and/or setup.cfg, or if not found, the value from –app-name. |
GB_SCRIPT |
–script, -s |
The path to the application file installed by pip when you installed your application. Depending on your configuration, this may be determined by options.entry_points.console_scripts from setup.py and/or setup.cfg. Default: $VIRTUAL_ENV/bin/app_name |
GB_SRC_DIR |
–src-dir, -d |
The relative path of the package containing your application. Default: . |
GB_PKG_DIR |
–pkg-dir, -p |
The relative or absolute path of the package containing your application. This directory must contain a setup.py file. Default: . |
(None) |
–verbose, -v |
Verbose mode. |
GB_EXTRA_DATA |
–extra-data, -e |
Relative to package directory, any extra directories or files that need to be included, that wouldn’t normally be included as Python code. Can be used multiple times. Default: None |
GB_WORK_DIR |
–work-dir, -w |
Directory for use by GravityBee to build application. Cannot be an existing directory as it will be deleted if the clean option is used. Default: gb_workdir_<uuid> |
(None) |
–clean, -c |
Whether to clean up the work directory after the build. If used, GravityBee will copy the built standalone application to the current directory before deleting. Default: Not |
GB_NAME_FORMAT |
–name-format, -f |
Format to be used in naming the standalone application. Must include {an}, {v}, {os}, {m} for app name, version, os, and machine type respectively. Default: {an}-{v}-standalone-{os}-{m} |
(None) |
–no-file |
Do not write gravitybee.file file with name of standalone. Default: Will write file |
If you are using environment variables, you could set them up like this.
$ export GB_APP_NAME=coolapp
$ export GB_PKG_NAME=coolapp
$ export GB_SCRIPT=/usr/var/python/etc/coolapp
Step 3 - Generate
Creating the standalone application is easy now.
$ gravitybee
If you are not using environment variables, you can combine steps 2 and 3.
$ gravitybee --app-name coolapp --script /usr/var/python/etc/coolapp --pkg-dir coolapp
The Test Example
Here is the file/package structure of the included test application.
gbtestapp
|-- setup.py
|-- setup.cfg
>-- src
| >-- gbtestapp
| |-- __init__.py
| |-- cli.py
| >-- gbextradata
| |-- __init__.py
| |-- data_file.txt
You would build the application as follows. Since the application package is under the src directory, you need to let GravityBee know. Also, since we need to include the data_file.txt file, we’ll use the --extradata option to include the containing directory (gbextradata).
$ cd gbtestapp
$ gravitybee --src-dir src --extra-data gbextradata --verbose --clean
From Python Example
Using GravityBee from a Python script is also possible. Using the sample test app, here’s some example code.
import gravitybee
args = gravitybee.Arguments(
src_dir="src",
extra_data=["gbextradata"],
verbose=True,
pkg_dir=os.path.join("tests", "gbtestapp"),
clean=True
)
pg = gravitybee.PackageGenerator(args)
pg.generate()
# show path (and name) of standalone app
print("The standalone app: ", pg.created_path)
Attribution
The idea for GravityBee’s core functionality comes from Nicholas Chammas and his project flintrock. Huge thanks to Nicholas!
Contribute
GravityBee is hosted on GitHub and is an open source project that welcomes contributions of all kinds from the community.
For more information about contributing, see the contributor guidelines.
CHANGE LOG
0.1.3 - 2018.05.01
[ENHANCEMENT] Create gravitybee.file with name of standalone application
0.1.2 - 2018.04.27
[ENHANCEMENT] Provide standalone file and path
[Bug Fix] Path bug.
0.1.1 - 2018.04.26
[Bug Fix] Many bug fixes.
0.1.0 - 2018.04.20
Initial release!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for gravitybee-0.1.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 58f473d3a92169bc7889e19dc1dc566a92b4138141c8febce42ee29b0cf754ed |
|
MD5 | 2db996784a5508c46bc366d098f8204f |
|
BLAKE2b-256 | 123cc11d6ba1c4748c631293dcc5a759db4fa6c156ef53dfc42861e2b8c2242c |