Skip to main content

Repackages apps to restrict installation into isolated env

Project description

📦 srepkg (Solo Repackage)

Python Versions PyPI codecov PyPI - Dependencies Docs License

srepkg is a Python package that wraps an isolation layer around other Python packages.

📖 Description

When a package wrapped in an isolation layer by srepkg is installed in an active, pre-existing Python environment:

  • The original package plus its dependencies are installed in a new, automatically created virtual environment.
  • A dependency-free "access" package installed in the pre-existing environment contains a controller module capable of making calls to the Python interpreter in the newly created environment.
  • This package structure ensures that none of the original package's dependencies conflict with packages in the pre-existing environment but still exposes the original package’s CL to the pre-existing environment.

🎯 Use Cases

For Package Distributors

  • srepkg can be useful if you are sharing a Python command line application, and you want to be certain that users can install and run it without worrying about dependency conflicts.
  • Wrapping a CL package with srepkg prior to sharing the package with other users will ensure that wherever the package is installed, it does not introduce dependency conflicts into a user's existing Python environment — even if the user knows nothing about managing Python environments.

For Package Users

  • Any existing CL package obtained from Python Packaging Index (PyPI) or GitHub can be wrapped with srepkg prior to installation.
  • If you want the original package commands to be accessible from a single environment (that is distinct from the isolated environment where the original package is installed), then srepkg is likely a good option.
  • However, if you want the isolated package's command interface to be available globally and/or want a much more mature isolation tool, then pipx is likely a better choice.

📘 Documentation

Full project documentation, including detailed examples, is available at: duanegoodner/github.io/srepkg

⚡ Quick Start

Requirements

  • Python version 3.9 or higher
  • For compatibility with srepkg, and existing package must:
    • Be installable via pip
    • Be compatible with the Python interpreter version that is running srepkg.
    • Have command line entry point(s) specified in either one the [project.scripts] section of a pyproject.toml (preferred), the [options.entry_points] section of a setup.cfg, or the entry_points arguments passed to setup() in a setupy.py file.
  • Optional: miniconda or conda if you want to exactly follow the examples below

Simple Demo

# Create and activate a new conda environment for testing
conda create -n srepkg_test python=3.11
conda activate srepkg_test

# Install srepkg from PyPI
pip install srepkg

# Re-package a version of black, obtained from PyPI
srepkg black -r 25.1.0  # creates re-package wheel and sdist under ./srepkg_dists

# install our re-packaged wheel
pip install ./srepkg_dists/blacksrepkg-25.1.0-py3-none-any.whl

# Confirm blacksrepkg is installed and that black is NOT installed in our conda env
conda list | grep black
# Output:
# blacksrepkg               25.1.0                   pypi_0    pypi

# Check if any of black's dependencies are installed in our conda environment
onda list | grep "click\|\
mypy_extensions\|\
packaging\|\
pathspec\|\
platformdirs\|\
tomli\|\
typing_extensions"

# Output:
# packaging                 24.2                     pypi_0    pypi

# Note: 'packaging' is installed because it is a dependency of 'srepkg'.
# No other package that black depends on is in our environment.

# Confirm that we have access to the black CLI
black -c "def foo():print('hello,world')"
# Output:
# def foo():
#    print("hello,world")

Command Line Help

For details on all srepkg command options, run:

srepkg --help

🧪 Testing

To run the project tests, we can clone a copy of the repo locally, and install in editable mode with:

$ git clone https://github.com/duanegoodner/srepkg
$ cd srepkg
$ pip install -e '.[test]'

Then run the test suite and generate a coverage report:

$ coverage run -m pytest
$ coverage report -m

🤝 Contributing

Issues, Pull Requests and/or Discussions are welcome and appreciated!

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

srepkg-0.1.3.tar.gz (74.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

srepkg-0.1.3-py3-none-any.whl (97.1 kB view details)

Uploaded Python 3

File details

Details for the file srepkg-0.1.3.tar.gz.

File metadata

  • Download URL: srepkg-0.1.3.tar.gz
  • Upload date:
  • Size: 74.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for srepkg-0.1.3.tar.gz
Algorithm Hash digest
SHA256 7e4caa12eca0b06288a0095f1b6a4234d6bedb34900540a5f086e927a758eb20
MD5 454f4270a09f5852c456f0f777e25351
BLAKE2b-256 daed1a54c603a73a1dd7a5db7d89d1ef6d3c927a33c674e2cc85a9f7ddaed42e

See more details on using hashes here.

File details

Details for the file srepkg-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: srepkg-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 97.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for srepkg-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c165700048fa60373e501dc82806e2a824ed79994f0b49b851f3ce5c9df65382
MD5 50a7fcf2f53abb080c7923dd2fad35fb
BLAKE2b-256 861ce419e81c24941917a8078d06523f4dd699dbb7dec62e8dae936a41f1851c

See more details on using hashes here.

Supported by

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