Skip to main content

The last Python environment manager you'll ever need.

Project description

yen

The last Python environment manager you'll ever need.

Credits: xkcd.com/1987

We're finally putting an end to this XKCD.

So what can yen do?

  • Get any Python version running instantly with just 1 command:

    $ python
    'python': command not found
    
    $ yen exec --python 3.12
    Downloading 3.12.3 ━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 17.4/17.4 MB • 29.1 MB/s
    Python 3.12.3 (main, Apr 15 2024, 17:43:11) [Clang 17.0.6 ] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> exit()
    
    $ yen exec --python 3.12  # Cached for subsequent uses:
    Python 3.12.3 (main, Apr 15 2024, 17:43:11) [Clang 17.0.6 ] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    

    Works on Windows, MacOS and Linux (libc and musl), on Intel and ARM chips.

  • Instant venv creation: Thanks to microvenv, yen can create virutal environments much faster than the builtin venv module:

    $ yen create venv -p 3.9
    Created venv with Python 3.9.18 ✨
    
    $ source venv/bin/activate
    
    (venv) $ python --version
    Python 3.9.18
    

    NOTE: It's not that fast right now as I found a bug. Working on it.

  • Zero dependencies: No need to have Python installed, no need to look into apt, homebrew etc., just run one shell command to get yen set up locally.

  • Python script management: Never run pip install to get a tool like ruff, awscli etc. in the global Python environment ever again.

Essentially, yen lets you replace various Python environment management tools such as pyenv, pipx and virtualenv, with a single static binary.

Running Python code on any machine has never been this easy.

Installation

Get yen by running the following command:

  • MacOS / Linux:

    curl -L yen.tushar.lol/install.sh | sh
    
  • Windows:

    Using cmd:

    curl -L yen.tushar.lol/install.bat | cmd
    

    or using Powershell:

    curl -L yen.tushar.lol/install.ps1 | Invoke-Expression
    

or if you prefer, get it via pip:

pip install yen

or pipx:

pipx run yen

Yeah, if you already have yen, you can do yen run yen and that works. But don't do that.

You can also grab the binary from GitHub releases.

Usage

$ yen list
Available Pythons:
3.12.3
3.11.9
3.10.14
3.9.19
3.8.19

$ yen create venv -p 3.12
Downloading 3.12.3 ━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 17.4/17.4 MB • 12.4 MB/s
Created venv with Python 3.12.3 ✨

$ yen install meowsay
Installed package meowsay with Python 3.12.3 ✨

$ meowsay hello!
 ________
< hello! >
 --------
        \      |\---/|
         \     | ,_, |
                \_`_/-..----.
             ___/ `   ' ,\"\"+ \  sk
            (__...'   __\    |`.___.';
              (_,...'(_,.`__)/'.....+

$ yen run --python 3.9 wttr
Weather report: Milano, Italy

     \  /       Partly cloudy
   _ /"".-.     20 °C
     \_(   ).   ↑ 4 km/h
     /(___(__)  10 km
                0.0 mm

$ wttr paris
Weather report: paris

      \   /     Sunny
       .-.      +22(25) °C
    ― (   ) ―   ↓ 7 km/h
       `-’      10 km
      /   \     0.0 mm

By default the Pythons will be downloaded in ~/.yen_pythons. You can change this location by setting the YEN_PYTHONS_PATH environment variable.

Local Development / Testing

  • Run yen create venv and venv/bin/activate

  • Run pip install -r requirements-dev.txt to do an editable install

  • Verify that you're now pointing at the correct yen:

    $ which yen
    /home/your_name/code/yen/venv/bin/yen
    
  • Run pytest to run tests

To run Rust tests:

  • Compile the rust project: cd yen-rs && cargo build
  • Run export YEN_RUST_PATH=./yen-rs/target/debug/yen-rs
  • Run pytest, and ensure that number of tests ran has doubled.

microvenv.py and userpath.pyz

These two files are used by yen and downloaded by the yen install script.

Type Checking

Run mypy .

Create and upload a package to PyPI

Make sure to bump the version in setup.cfg.

Then run the following commands:

pip install setuptools wheel twine
rm -rf build dist
python setup.py sdist bdist_wheel

Then upload it to PyPI using twine:

twine upload dist/*

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

yen-0.6.0.tar.gz (18.6 kB view details)

Uploaded Source

Built Distribution

yen-0.6.0-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file yen-0.6.0.tar.gz.

File metadata

  • Download URL: yen-0.6.0.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for yen-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3bbc486f66e71f9cfbafac55c8810eb09989951e357f4db69c34f49642ad1c97
MD5 4d8aae1101e523424f08d35d745f5d57
BLAKE2b-256 28788f8ad46f038fd9e6f6fa7b04b5d37c810d09a493b9089e012f6846a192a6

See more details on using hashes here.

File details

Details for the file yen-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: yen-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for yen-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3f2c22130ec187f429588f3416c4f29f56f0f91a29506478b84426ce8fccce60
MD5 421999d80f6dc0bd4da892845ed3cb7b
BLAKE2b-256 1cfeafe77f922b0eddf187ea61fcd8c56463921ba4d7ae1d1fa431a280a2f06c

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