Seite 1 von 1
venv/pyproject.toml: argcomplete aufnehmen
Verfasst: Freitag 22. Dezember 2023, 17:35
von RonaldG
Ich habe eine venv eingerichtet und ein pyproject.toml erstellt.
erstellt ein lauffähiges Programm
Code: Alles auswählen
~/.venvs/cunim/bin> cat cunim
#!/home/rgg/.venvs/cunim/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from cunim.__main__ import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
was noch fehlt:
In der Zeile 2 muss noch eine Kommentarzeile eingefügt werden damit die TAB-Completion funktioniert:
Weder im PEP 517 noch bei den Beschreibung von setuptools noch im [tools]-Block habe ich etwas brauchbares gefunden.
Hat jemand einen Tipp wie man das machen könnte?
(außer dass man das in die README.md aufnimmt

)
Re: venv/pyproject.toml: argcomplete aufnehmen
Verfasst: Freitag 22. Dezember 2023, 17:56
von Sirius3
Vielleicht geht irgendwas mit einem setuptools plugin?
Re: venv/pyproject.toml: argcomplete aufnehmen
Verfasst: Freitag 22. Dezember 2023, 18:33
von RonaldG
@Sirius3: Über das Modul "setuptools" bin ich auch gestolpert, habe aber nichts brauchbares gefunden.
Hast du mir ein Beispiel was man damit machen kann?
Re: venv/pyproject.toml: argcomplete aufnehmen
Verfasst: Samstag 23. Dezember 2023, 14:57
von RonaldG
Hab keine Lösung gefunden.
Work-around: ich schreibe ins README.md, dass man diese Zeile manuell aufnehmen soll.
Schade, denn für mich ist die TAB-Completion ein sehr wichtiges Feature in der bash.
Noch in paar Infos:
- ~/.venvs/cunim/lib/python3.10/site-packages/pip/_vendor/distlib/scripts.py enthält im SCRIPT_TEMPLATE den Quellcode (mit Platzhaltern)
- im ScriptMaker._make_script() wird das Programm erstellt (und nach /home/xxx/.venvs/xxx/bin/xxx geschrieben).
- In der make()-Methode sollte ein _copy_script() aufgerufen werden, aber das habe ich nicht geschafft. Ich habe im pyproject.toml ein bisschen rumgespielt (mit -, _, $, /, ...), aber das weist der TOML-Parser schon zurück
.
- Eine bash_completion-funktion erstellen war keine Option, denn die müsste ich ja auch irgendwie installieren und später dann auch aktivieren (das ist ja noch komplizierter).
Wie gesagt: schade.
Re: venv/pyproject.toml: argcomplete aufnehmen
Verfasst: Samstag 23. Dezember 2023, 15:26
von narpfel
Ich hab’s nur überflogen, aber
dieses Issue scheint genau das Problem zu sein.
Hier steht, dass das eigentlich™ funktionieren sollte, weil `argcomplete` von `pip` erstellte Startscripts speziell unterstützt. In dem Issue wird angenommen, dass es nicht funktioniert, weil das Programm irgendwie falsch installiert ist. Vielleicht kannst du das ja mal bei dir nachvollziehen; und wenn es ein anderes Problem ist, ein neues Issue aufmachen? Weil das ja eigentlich™ funktionieren sollte.
Re: venv/pyproject.toml: argcomplete aufnehmen
Verfasst: Donnerstag 28. Dezember 2023, 00:09
von RonaldG
Ich habe mich füreeinen schmutzigen/pragmatischen Workaround entschieden

:
Der Eintry-Point heißt nicht mehr "main", sondern "main_PYTHON_ARGCOMPLETE_OK".
Jetzt findet die bash-function von kislyuk (
https://github.com/kislyuk/argcomplete) den String und die bash_completion funktioniert.
Code: Alles auswählen
__python_argcomplete_scan_head ()
{
local file="$1";
local target="$2";
if [[ -n "${ZSH_VERSION-}" ]]; then
read -r -k 1024 -u 0 < "$file";
else
read -r -N 1024 < "$file";
fi;
if [[ "$target" = "interpreter" ]]; then
read -r <<< "$REPLY";
fi;
local regex;
case "$target" in
magic_string)
regex='PYTHON_ARGCOMPLETE_OK'
;;
easy_install)
regex="(PBR Generated)|(EASY-INSTALL-(SCRIPT|ENTRY-SCRIPT|DEV-SCRIPT))"
;;
asdf)
regex="asdf exec "
;;
interpreter)
regex='^#!(.*)$'
;;
esac;
local ret="";
if [[ "$REPLY" =~ $regex ]]; then
ret=1;
fi;
__python_argcomplete_upshift_bash_rematch;
[[ -n $ret ]]
}