The last Python environment manager you'll ever need.
MIT License
The last Python environment manager you'll ever need.
We're finally putting an end to this XKCD.
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 virtual
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.
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 -o yen-install.bat
yen-install.bat
or using Powershell:
curl 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 doyen run yen
and that works. But don't do that.
You can also grab the binary from GitHub releases.
$ 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 theYEN_PYTHONS_PATH
environment variable.
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:
cd yen-rs && cargo build
export YEN_RUST_PATH=./yen-rs/target/debug/yen-rs
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.
microvenv.py
is just this file renamed.userpath.pyz
is created by running ./build-standalone.sh
inRun mypy .
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/*