Skip to main content

Python Inliner merges in a single file all files from a Python package.

Project description

pinliner - Python Inliner

https://img.shields.io/:license-apache-blue.svg https://img.shields.io/pypi/v/pinliner.svg

This tool allows you to merge all files that comprise a Python package into a single file and be able to use this single file as if it were a package.

Not only will it behave as if it were the original package, but it will also show code in exceptions and debug sessions, and will display the right line number and file when logging.

Imports will work as usual so if you have a package structure like:

.
└── [my_package]
     ├── file_a.py
     ├── [sub_package]
     │    ├── file_b.py
     │    └── __init__.py
     ├── __init__.py

And with pinliner installed you execute:

$ mkdir test
$ pinliner my_package test/my_package.py
$ cd test
$ python

You’ll be able to use generated my_package.py file as if it were the real package:

>>> import my_package
>>> from my_package import file_a as a_file
>>> from my_package.sub_package import file_b

And __init__.py contents will be executed as expected when importing my_package package and you’ll be able to access its contents like you would with your normal package.

Modules will also behave as usual.

If your package is checking __name__ for __main__ it will also work as usual. Although given the fact that we only have 1 file we will no longer be able to call other packages/modules directly from the command line to trigger code conditioned to __name__ having __main__ as its value.

Loader code will automatically compile packages and modules to byte code, before running it. When a module is imported for the first time, or when the specific’s package/module source (not the whole inlined file) is more recent than the current compiled file, a .pyc file containing the compiled code will be created in the same directory as the pinlined .py file.

If the byte code is up to date then it will be used instead, thus avoiding a recompilation, exactly the same as python normally does, with the only exception that all .pyc files will be in the same directory and the filenames will include the full path to the original file.

Installation

You can install pinliner globally in your system or use a virtual environment, this is how it could be done using a virtual environment:

$ virtualenv .venv
$ source .venv/bin/activate
$ pip install pinliner

After that you can run the tool with pinliner.

History

0.2.0 (2016-04-03)

  • Add support for incompatible loaders to coexists.

  • Generate and use pyc files for modules.

  • Add support for the filename to be different than the package.

  • Now __main__ works directly from the package as expected.

0.1.1 (2016-03-29)

  • Fix missing template file when installing

  • Reduce memory footprint to keep the package structure and code.

  • Include tagging of beginning of files in the output.

0.1.0 (2016-03-27)

  • Show code when debugging and on tracebacks

  • Improve internal package and module names

  • Fix line numbers (off by 1)

  • Package’s root namespace is no longer polluted by pinliner

  • Original filename for package/modules is stored so it will be reported by exceptions and logging.

0.0.1 (2016-03-26)

  • Basic functionality.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pinliner-0.2.0.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

pinliner-0.2.0-py2.py3-none-any.whl (10.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pinliner-0.2.0.tar.gz.

File metadata

  • Download URL: pinliner-0.2.0.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pinliner-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c5d2438b3a1f583c22e377004a2b992f5cdc0f98ee0bff88b3e8ee0f138eb1c3
MD5 fd9e6ec32b44143066dca78203bcd128
BLAKE2b-256 258cf8a0523d96f8340f24d2a6d0ee99537f87c5293c0e72cfc6ba1783dbd44a

See more details on using hashes here.

File details

Details for the file pinliner-0.2.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pinliner-0.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e8962390e8566c84ab656cc6c1aab3916c757d69e969954ab8b892005b2289bd
MD5 ce6ecaa090c1dcffda289c5bb9b12a57
BLAKE2b-256 1fecd3f78c643db8051f1f526f57b496a1728ff009e2e850fd5b48b085edb6a6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page