https://github.com/pyenv/pyenv-users
List virtual environments that use pyenv-managed versions of Python
https://github.com/pyenv/pyenv-users
Last synced: 10 months ago
JSON representation
List virtual environments that use pyenv-managed versions of Python
- Host: GitHub
- URL: https://github.com/pyenv/pyenv-users
- Owner: pyenv
- License: mit
- Created: 2021-01-29T01:24:18.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2025-01-24T19:57:24.000Z (about 1 year ago)
- Last Synced: 2025-04-19T08:30:27.445Z (10 months ago)
- Language: Shell
- Homepage:
- Size: 20.5 KB
- Stars: 6
- Watchers: 4
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.txt
Awesome Lists containing this project
README
pyenv-users
===========
Search a directory for virtual environments that use pyenv-managed versions of
Python.
I find it helpful for verifying that I can safely uninstall old Python
versions. Unlike the `pyenv-virtualenv
`_ plugin, this will list all
virtual environments, regardless of how they were created (``python -m venv
``, ``poetry install``, etc).
Prerequisites
-------------
* GNU coreutils (for ``readlink`` and ``realpath``)
* GNU findutils (for ``find``)
Installation
------------
.. code-block:: bash
$ git clone https://github.com/pyenv/pyenv-users.git "$(pyenv root)/plugins/pyenv-users"
Usage
-----
Run ``pyenv users`` to search the current directory for virtual environments,
or ``pyenv users `` to search a specific directory. For example, to
search your home directory:
.. code-block:: bash
$ pyenv users ~
3.7.9 .cache/pypoetry/virtualenvs/my_project-KM_3YcvM-py3.7
3.7.9 work/venvs/long name with spaces
3.8.6 .cache/pypoetry/virtualenvs/my_project-KM_3YcvM-py3.8
pypy3.6-7.3.1 work/venvs/example1
For scripting, use the ``--raw`` option to output a list of ``:`` separated
items. The ``--absolute-paths`` option may also be useful in this case:
.. code-block:: bash
$ pyenv users --raw --absolute-paths ~
3.7.9:/home/peter/.cache/pypoetry/virtualenvs/my_project-KM_3YcvM-py3.7
3.7.9:/home/peter/work/venvs/long name with spaces
3.8.6:/home/peter/.cache/pypoetry/virtualenvs/my_project-KM_3YcvM-py3.8
pypy3.6-7.3.1:/home/peter/work/venvs/example1
For example, to get a list of all versions linked to a virtual environment:
.. code-block:: bash
$ pyenv users --raw ~ | cut -d: -f1 | uniq
3.7.9
3.8.6
pypy3.6-7.3.1
The list of linked versions can be combined with the list of all installed
versions to show which installations are not linked to any environment in the
specified directory:
.. code-block:: bash
$ pyenv versions --bare
3.6.10
3.7.5
3.7.9
3.8.6
3.9.1
pypy3.6-7.3.0
pypy3.6-7.3.1
$ comm -3 <(pyenv users --raw ~ | cut -d: -f1 | uniq) <(pyenv versions --bare) | tr -d "[:blank:]"
3.6.10
3.7.5
3.9.1
pypy3.6-7.3.0
Disclaimer
----------
The plugin doesn't maintain a list of environments; it generates the list each
run by performing a brute force scan of the directory for symlinks named
`python`. This does mean it's not blazingly fast, but its simplicity provides
state-free reliability, and in practice ``find`` only takes a few seconds.
Also, it could really use more testing; so far I've been using it on Fedora 33
with no issues. Tested with ``bash v5.0.17(1)`` and ``find v4.7.0``.