Je viens de publier le code de Tikka sur notre GitLab.
C’est le début d’une aventure participative où les développeurs Python pourront ajouter des modules.
L’interface est à base d’onglets, ce qui facilite l’ajout de plein de fonctionnalités sans complexifier l’interface.
Je désire faire une visio sur l’organisation du code pour les développeurs Python intéressés.
La première chose à faire maintenant est la configuration de la CI/CD pour avoir un package autonome téléchargeable sur le GitLab.
J’utilise Pyinstaller qui permet de compiler un executable pour Linux, Windaube et Macos.
Mais il faut compiler sur la plateforme de destination.
J’ai un logo (merci @Attilax), mais aussi un slogan :
J’ai fait poetry install et wxpython est super lent à compiler… Il n’y a pas moyen d’utiliser une version déjà compilée ?
Les gens se plaignent que le Rust est très lent à compiler, mais à chaque fois que je compile un truc en C/C++ ça prend des plombes. (et encore heureusement là il n’y a pas Qt)
Edit: poetry install s’est terminé avec succès, mais ensuite je ne sais pas comment lancer tikka. J’ai essayé python -m tikka mais ModuleNotFoundError: No module named 'yoyo' ; make pyinstaller mais ça fait une erreur aussi.
Pour utiliser Tikka à partir du dépôt, je te conseille de créer un environnement virtuel, avec une version de Python 3.6+ (mais testé que sur 3.6). Mais je suppose que tu l’as fait.
Normalement, après un poetry install, la commande tikka est disponible.
Mais python -m tikka fonctionne aussi (__main__.py est le script de démarrage).
Tikka démarre, mais l’absence de la dépendence yoyo n’est pas normale. Je vais vérifier ça demain.
Désolé pour wxPython, mais je crois que c’est comme Qt, les dépendances en C sont incluses (à vérifier) et de mémoire ce type d’installation est la méthode la plus simple et fiable (mais longue, oui).
Merci pour tes retours rapides ! L’ aventure commence !
C’est maintenant indiqué dans le README. merci pour le retour.
C’est une bonne pratique, mais pas un pré-requis. Donc on ne peut pas l’imposer. Si tu ne fais jamais d’environnement virtuel, cela veut dire que les versions des dépendances de tous tes projets python se télescopent entre elles et modifiant aussi celles de ton python système. Et ton python système peut alors casser, faisant carrément planter ton Linux.
Je ne pense pas que l’environnement virtuel absent ce soit la cause du problème, mais cela m’aidera à isoler le problème. Plutôt la version de Python trop récente pour yoyo.
Pour en être sûr, peux-tu suivre pas à pas la nouvelle procédure du README en installant python 3.6.8 avec pyenv, puis en créant un environnement virtuel lié à python 3.6.8 avec poetry. Un environnement virtuel se crée à partir d’un version précise de python, qui ne peut plus être changée après. Le lien vers la gestion des environnements virtuels par poetry explique bien comment gérer la version de python avec pyenv.
Pour yoyo-migrations, une fois installé, on accède au package avec import yoyo… C’est surprenant, mais pas anormal. Il y a d’autres bibliothèques qui font ça.
J’ai aussi déplacé la dépendance pyinstaller dans les dépendances de dev, car elle ne sert que pour le build d’un exécutable, pas pendant le runtime.
Non pas du tout, mais je n’ai pas bien compris les droits d’accès. Je comptais voir ça avec toi.
Seuls les comptes enregistrés sont censés pouvoir agir en écriture sur le dépôt. Mais tout le monde doit pouvoir le lire et le télécharger.
Le projet peut être passé en public via cette configuration.
Je confirme qu’il faut prévoir une bonne heure pour la compilation de wxPython.
J’ai publié des correctifs et ait ouvert un ticket pour remonter un problème.
Oui la compilation de wxPython est trèèèèès longue, mais heureusement ne concerne que les contributeurs, pas les utilisateurs qui auront un package autonome réalisé par pyinstaller.
J’ai ouvert au public le dépôt. Les écritures sont réservées aux contributeurs enregistrés dans GitLab.
Exception:
Traceback (most recent call last):
File "/tmp/tikka_tests/.venv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 143, in main
status = self.run(options, args)
File "/tmp/tikka_tests/.venv/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 259, in run
with self._build_session(options) as session:
File "/tmp/tikka_tests/.venv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 76, in _build_session
if options.cache_dir else None
File "/home/vit/.pyenv/versions/3.6.8/lib/python3.6/posixpath.py", line 80, in join
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not int
Traceback (most recent call last):
File "/tmp/tikka_tests/.venv/bin/pip", line 11, in <module>
sys.exit(main())
File "/tmp/tikka_tests/.venv/lib/python3.6/site-packages/pip/_internal/__init__.py", line 78, in main
return command.main(cmd_args)
File "/tmp/tikka_tests/.venv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 184, in main
timeout=min(5, options.timeout)
File "/tmp/tikka_tests/.venv/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 76, in _build_session
if options.cache_dir else None
File "/home/vit/.pyenv/versions/3.6.8/lib/python3.6/posixpath.py", line 80, in join
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not int
Je l’ai corrigé en excluant l’utilisation du cache et en mettant pip à jour:
pip install --upgrade --no-cache-dir pip
J’ai également corrigé d’autres bugs, comme les dataclasses introuvables et les fichiers locales .mo introuvable dans la wheel (poetry build).
$ make pyinstaller
pyinstaller dist/tikka.spec
432 INFO: PyInstaller: 4.2
432 INFO: Python: 3.9.6
433 INFO: Platform: Linux-5.10.52-1-lts-x86_64-with-glibc2.33
482 INFO: UPX is available.
Traceback (most recent call last):
File "/usr/bin/pyinstaller", line 8, in <module>
sys.exit(run())
File "/usr/lib/python3.9/site-packages/PyInstaller/__main__.py", line 114, in run
run_build(pyi_config, spec_file, **vars(args))
File "/usr/lib/python3.9/site-packages/PyInstaller/__main__.py", line 65, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "/usr/lib/python3.9/site-packages/PyInstaller/building/build_main.py", line 725, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "/usr/lib/python3.9/site-packages/PyInstaller/building/build_main.py", line 672, in build
exec(code, spec_namespace)
File "dist/tikka.spec", line 26, in <module>
a = Analysis(['../tikka/__main__.py'],
TypeError: __init__() got an unexpected keyword argument 'hooksconfig'
make: *** [Makefile:53 : pyinstaller] Erreur 1
Et pour pip :
$ pip install --upgrade --no-cache-dir pip
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pip in /usr/lib/python3.9/site-packages (20.3.4)
Collecting pip
Downloading pip-21.2.3-py3-none-any.whl (1.6 MB)
|████████████████████████████████| 1.6 MB 478 kB/s
WARNING: Discarding https://files.pythonhosted.org/packages/ca/bf/4133a0e05eac641ec270bbcef30512b5ad307d7838adb994acd652cc30e3/pip-21.2.3-py3-none-any.whl#sha256=895df6014c2f02f9d278a8ad6e31cdfd312952b4a93c3068d0556964f4490057 (from https://pypi.org/simple/pip/) (requires-python:>=3.6). Requested pip from https://files.pythonhosted.org/packages/ca/bf/4133a0e05eac641ec270bbcef30512b5ad307d7838adb994acd652cc30e3/pip-21.2.3-py3-none-any.whl#sha256=895df6014c2f02f9d278a8ad6e31cdfd312952b4a93c3068d0556964f4490057 has different version in metadata: '21.2.3'
puis il télécharge toutes les versions de pip dans l’ordre décroissant, avec la même erreur à chaque fois. J’avais déjà eu ce problème avec duniterpy, et il y a une issue toujours pas résolue depuis des années sur le git de pip.