Skip to main content

A fun party trick to run Python code from another venv into this one.

Project description

uvtrick

A fun party trick, via uv and pickle, to run Python code from another venv ... into this one.

Quickstart

You can install this tool via:

uv pip install uvtrick

Usage

External scripts

There are a few ways to use this library. The first one is to use the load function to point to a Python script that contains the function you want to use. This function assumes that the script carries inline script metadata.

from uvtrick import load

# Load the function `add` from the file `some_script.py`
# It runs in another virtualenv, but you get back the response via pickle. 
# Be aware of the limitations, please only consider base Python objects.
add = load("some_script.py", "add")

# This result is from the `some_script.py` file, running in another virtualenv 
# with `uv`. A pickle in a temporary file is used to communicate the result.
add(1, 2)  # 3

From within Python

But you can also take it a step further and use the Env class to run a function in a specific environment.

from uvtrick import Env

# For illustration purposes, let's assume that rich is not part of the current environment. 
# Also note that all the imports happen inside of this function. 
def uses_rich():
    from rich import print
    from importlib import metadata

    version = metadata.version("rich")
    print(f"hello from rich=={version}")

# This runs the function `uses_rich` in a new environment with the `rich` package installed.
# Just like the `load` function before, the result is returned via pickle. 
Env("rich", python="3.12").run(uses_rich)

This approach is pretty useful if you are interested in running the same function in different versions of a dependency to spot a performance regression. You might be able to do that via something like:

from uvtrick import Env

def uses_rich(a, b):
    from rich import print
    from importlib import metadata

    version = metadata.version("rich")
    print(f"hello from rich=={version}")
    return a + b

for version in (10, 11, 12, 13):
    Env(f"rich=={version}", python="3.12").run(uses_rich, a=1, b=2)

Be aware that a lot of pickling is happening under the hood here. This can be a problem if you are trying to pickle large objects or if your function is returning an object that needs a dependency that is not installed in the environment that is calling Env.

Also note that thusfar this entire project is merely the result of a very entertaining recreational programming session. We might want to gather some community feedback before suggesting production usage.

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

uvtrick-0.4.2.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

uvtrick-0.4.2-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

File details

Details for the file uvtrick-0.4.2.tar.gz.

File metadata

  • Download URL: uvtrick-0.4.2.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.13

File hashes

Hashes for uvtrick-0.4.2.tar.gz
Algorithm Hash digest
SHA256 e76e109a9af951491cb202e50d244274510c208605109dfca9552a890a8455e3
MD5 36b31ee072d032e8fe7fe8f9334c27c9
BLAKE2b-256 f65ea51b560228b2abacdae3f17b8b39adbee6e74c27d1f5bdb8500b1558a3ad

See more details on using hashes here.

File details

Details for the file uvtrick-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: uvtrick-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 5.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.13

File hashes

Hashes for uvtrick-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c32ad6fbbf358055fb150aa1ec94aa73d66f6b4df11c28bbd9572cc8e4c0eb78
MD5 ccf32b45b5a5af91e49eb956d9bd9b7d
BLAKE2b-256 4ce7c33ac3f7adc35fb6775877d4207ac84f4df821cb18c05b9890086f31981b

See more details on using hashes here.

Supported by

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