Prayag2 / konsave

A command line program written in Python to let you backup your dotfiles and switch to other ones in an instant. Works out-of-the box on KDE Plasma!
GNU General Public License v3.0
957 stars 35 forks source link

[Docs] Recommend pipx in the documentation #105

Open gbg4812 opened 6 months ago

gbg4812 commented 6 months ago

When trying to install konsave with pip like described in the README it doesn't work and the next message is fired:

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.11/README.venv for more information.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

The solution is to use pipx (as stated in PEP668 ) or create manually a virtual environment witch my not be trivial for non-python users.

So I think it would be good to recommend pipx in the documentation for installation.

Prayag2 commented 4 months ago

Good idea. I'll do that soon.

paidhi commented 3 months ago

I use pipx a lot with Linux distributions that do not provide packages (or only very outdated versions) for Python-based utilities (e.g. konsave, pyinfra, hatch, borgmatic).

On Linux distributions with very recent default Python (>= 3.12) the following error will occur if installing via pipx:

Traceback (most recent call last):
  File "/home/mb/.local/bin/konsave", line 5, in <module>
    from konsave.__main__ import main
  File "/home/mb/.local/share/pipx/venvs/konsave/lib64/python3.12/site-packages/konsave/__init__.py", line 3, in <module>
    from pkg_resources import get_distribution, DistributionNotFound
ModuleNotFoundError: No module named 'pkg_resources'

A workaround is to add the setuptools package to the pipx environment:

pipx install konsave
pipx inject konsave setuptools

The reason for the error is that Python 3.12 has removed the distutils package. It was deprecated since Python 3.10. See: https://docs.python.org/3/whatsnew/3.12.html#distutils