mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-29 20:12:38 +02:00
380 lines
No EOL
88 KiB
XML
380 lines
No EOL
88 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<feed xmlns="http://www.w3.org/2005/Atom"><title>Alexis Métaireau - code</title><link href="https://blog.notmyidea.org/" rel="alternate"></link><link href="https://blog.notmyidea.org/feeds/code.atom.xml" rel="self"></link><id>https://blog.notmyidea.org/</id><updated>2023-09-22T00:00:00+02:00</updated><entry><title>How to run the vigogne model locally</title><link href="https://blog.notmyidea.org/how-to-run-the-vigogne-model-locally.html" rel="alternate"></link><published>2023-09-22T00:00:00+02:00</published><updated>2023-09-22T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-09-22:/how-to-run-the-vigogne-model-locally.html</id><summary type="html">
|
||
<p><a href="https://github.com/bofenghuang/vigogne">Vigogne</a> is a <span class="caps">LLM</span> model based on <span class="caps">LLAMA2</span>, but trained with french data. As I&#8217;m working mostly in french, it might be useful. The current models that I can get locally are in&nbsp;english.</p>
|
||
<p>The information I&#8217;ve found online are scarse and not so easy to follow, so …</p></summary><content type="html">
|
||
<p><a href="https://github.com/bofenghuang/vigogne">Vigogne</a> is a <span class="caps">LLM</span> model based on <span class="caps">LLAMA2</span>, but trained with french data. As I&#8217;m working mostly in french, it might be useful. The current models that I can get locally are in&nbsp;english.</p>
|
||
<p>The information I&#8217;ve found online are scarse and not so easy to follow, so here is a step by step tutorial you can follow. I&#8217;m using <a href="https://pipenv.pypa.io/en/latest/">pipenv</a> almost everywhere now, it&#8217;s so easy&nbsp;:-)</p>
|
||
<div class="highlight"><pre><span></span><code>llm<span class="w"> </span>install<span class="w"> </span>-U<span class="w"> </span>llm-llama-cpp
|
||
wget<span class="w"> </span>https://huggingface.co/TheBloke/Vigogne-2-7B-Chat-GGUF/resolve/main/vigogne-2-7b-chat.Q4_K_M.gguf
|
||
llm<span class="w"> </span>llama-cpp<span class="w"> </span>add-model<span class="w"> </span>vigogne-2-7b-chat.Q4_K_M.gguf<span class="w"> </span>-a<span class="w"> </span>vigogne
|
||
llm<span class="w"> </span>models<span class="w"> </span>default<span class="w"> </span>vigogne
|
||
</code></pre></div></content><category term="code"></category><category term="llm"></category></entry><entry><title>Creating a simple command line to post snippets on Gitlab</title><link href="https://blog.notmyidea.org/creating-a-simple-command-line-to-post-snippets-on-gitlab.html" rel="alternate"></link><published>2023-09-18T00:00:00+02:00</published><updated>2023-09-18T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-09-18:/creating-a-simple-command-line-to-post-snippets-on-gitlab.html</id><summary type="html">
|
||
<p>I&#8217;m trying to get away from Github, and one thing that I find useful is the <a href="https://gist.github.com">gist</a> utility they&#8217;re providing. Seems that gitlab provides a similar&nbsp;tool.</p>
|
||
<p>You can use it using <a href="https://python-gitlab.readthedocs.io/">python-gitlab</a>:</p>
|
||
<div class="highlight"><pre><span></span><code>pipx<span class="w"> </span>install<span class="w"> </span>python-gitlab
|
||
</code></pre></div>
|
||
|
||
<p>And then&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>gitlab<span class="w"> </span>snippet<span class="w"> </span>create<span class="w"> </span>--title<span class="o">=</span><span class="s2">&quot;youpi&quot;</span><span class="w"> </span>--file-name<span class="o">=</span><span class="s2">&quot;snip.py&quot;</span><span class="w"> </span>--content<span class="w"> </span>snip …</code></pre></div></summary><content type="html">
|
||
<p>I&#8217;m trying to get away from Github, and one thing that I find useful is the <a href="https://gist.github.com">gist</a> utility they&#8217;re providing. Seems that gitlab provides a similar&nbsp;tool.</p>
|
||
<p>You can use it using <a href="https://python-gitlab.readthedocs.io/">python-gitlab</a>:</p>
|
||
<div class="highlight"><pre><span></span><code>pipx<span class="w"> </span>install<span class="w"> </span>python-gitlab
|
||
</code></pre></div>
|
||
|
||
<p>And then&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>gitlab<span class="w"> </span>snippet<span class="w"> </span>create<span class="w"> </span>--title<span class="o">=</span><span class="s2">&quot;youpi&quot;</span><span class="w"> </span>--file-name<span class="o">=</span><span class="s2">&quot;snip.py&quot;</span><span class="w"> </span>--content<span class="w"> </span>snip.py<span class="w"> </span>--visibility<span class="o">=</span><span class="s2">&quot;public&quot;</span>
|
||
</code></pre></div>
|
||
|
||
<p>I now wanted a small bash script which will just get the name of the file and infer all the parameters. I asked <span class="caps">GPT</span>-4, and iterated on its&nbsp;answer.</p>
|
||
<p>Here&#8217;s the resulting bash&nbsp;script:</p>
|
||
<div class="highlight"><pre><span></span><code><span class="ch">#!/bin/bash</span>
|
||
|
||
<span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span>-z<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span><span class="w"> </span><span class="o">]</span>
|
||
<span class="k">then</span>
|
||
<span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;Please provide a filename&quot;</span>
|
||
<span class="w"> </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
|
||
<span class="k">fi</span>
|
||
|
||
<span class="nv">file</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$1</span><span class="s2">&quot;</span>
|
||
<span class="nv">base</span><span class="o">=</span><span class="k">$(</span>basename<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span><span class="k">)</span>
|
||
<span class="nv">title</span><span class="o">=</span><span class="s2">&quot;</span><span class="nv">$base</span><span class="s2">&quot;</span>
|
||
<span class="nv">visibility</span><span class="o">=</span><span class="s2">&quot;public&quot;</span>
|
||
|
||
<span class="c1"># Use `cat` to fetch the content of the file</span>
|
||
<span class="nv">content</span><span class="o">=</span><span class="k">$(</span>cat<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$file</span><span class="s2">&quot;</span><span class="k">)</span>
|
||
|
||
<span class="nv">result</span><span class="o">=</span><span class="k">$(</span>gitlab<span class="w"> </span>snippet<span class="w"> </span>create<span class="w"> </span>--title<span class="o">=</span><span class="s2">&quot;</span><span class="nv">$title</span><span class="s2">&quot;</span><span class="w"> </span>--file-name<span class="o">=</span><span class="s2">&quot;</span><span class="nv">$title</span><span class="s2">&quot;</span><span class="w"> </span>--content<span class="o">=</span><span class="s2">&quot;</span><span class="nv">$content</span><span class="s2">&quot;</span><span class="w"> </span>--visibility<span class="o">=</span><span class="s2">&quot;</span><span class="nv">$visibility</span><span class="s2">&quot;</span><span class="k">)</span>
|
||
|
||
<span class="nv">id</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;</span><span class="nv">$result</span><span class="s2">&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>awk<span class="w"> </span><span class="s1">&#39;/id: / { print $2 }&#39;</span><span class="k">)</span>
|
||
<span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;https://gitlab.com/-/snippets/</span><span class="nv">$id</span><span class="s2">&quot;</span>
|
||
</code></pre></div>
|
||
|
||
<p>I can now do <code>snip README.md</code> and that will create the snippet for me&nbsp;:-)</p></content><category term="code"></category></entry><entry><title>Creating an online space to share markdown files</title><link href="https://blog.notmyidea.org/creating-an-online-space-to-share-markdown-files.html" rel="alternate"></link><published>2023-09-17T00:00:00+02:00</published><updated>2023-09-17T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-09-17:/creating-an-online-space-to-share-markdown-files.html</id><summary type="html">
|
||
<p>I wanted to create a space on my server where I can upload markdown files and have them rendered directly, for them to be shared with other&nbsp;people.</p>
|
||
<p>I stumbled on <a href="https://github.com/ukarim/ngx_markdown_filter_module">the markdown module for nginx</a> which does exactly what I want, but seemed to ask for compilation of nginx …</p></summary><content type="html">
|
||
<p>I wanted to create a space on my server where I can upload markdown files and have them rendered directly, for them to be shared with other&nbsp;people.</p>
|
||
<p>I stumbled on <a href="https://github.com/ukarim/ngx_markdown_filter_module">the markdown module for nginx</a> which does exactly what I want, but seemed to ask for compilation of nginx, which wasn&#8217;t exactly what I wanted in terms of maintainability (it would make it complicated to update&nbsp;it)</p>
|
||
<p>I then thought that the <a href="https://caddyserver.com/">Caddy</a> server does that by default, and so I&#8217;ve tested it out. Turns out it&#8217;s not, but it offers ways to do this thanks to its template&nbsp;mecanism.</p>
|
||
<p>It also, <a href="https://caddyserver.com/docs/automatic-https">setups automatically and transparently <span class="caps">SSL</span> certificates</a> for you (using Let&#8217;s Encrypt!), so I wanted to have a&nbsp;look.</p>
|
||
<p>Here is the Caddy configuration file I&#8217;m now using&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>md.notmyidea.org {
|
||
root * /home/caddy/md.notmyidea.org
|
||
rewrite * /index.html
|
||
file_server
|
||
templates
|
||
encode zstd gzip
|
||
|
||
}
|
||
</code></pre></div>
|
||
|
||
<p>And the&nbsp;template:</p>
|
||
<div class="highlight"><pre><span></span><code>{{$pathParts := splitList &quot;/&quot; .OriginalReq.URL.Path}}
|
||
{{$markdownFilename := default &quot;index&quot; (slice $pathParts 1 | join &quot;/&quot;)}}
|
||
|
||
{{if not (fileExists $markdownFilename)}}
|
||
{{httpError 404}}
|
||
{{end}}
|
||
|
||
{{$markdownFile := (include $markdownFilename | splitFrontMatter)}}
|
||
<span class="cp">&lt;!DOCTYPE html&gt;</span>
|
||
<span class="p">&lt;</span><span class="nt">html</span><span class="p">&gt;</span>
|
||
<span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
|
||
<span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span>{{ $markdownFilename }}<span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span>
|
||
<span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
|
||
<span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
|
||
{{ markdown $markdownFile.Body }}
|
||
<span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
|
||
<span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
|
||
</code></pre></div>
|
||
|
||
<p>This is a minimalistic version, but it works&nbsp;:-)</p></content><category term="code"></category></entry><entry><title>Conversion d’un fichier svg en favicon.ico</title><link href="https://blog.notmyidea.org/conversion-dun-fichier-svg-en-faviconico.html" rel="alternate"></link><published>2023-09-13T00:00:00+02:00</published><updated>2023-09-13T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-09-13:/conversion-dun-fichier-svg-en-faviconico.html</id><summary type="html">
|
||
<p>Il y a plusieurs sites qui permettent de faire ça automatiquement, mais j&#8217;aime bien faire les choses depuis mon terminal, voici donc une commande qui permet de faire ça simplement, en utilisant <a href="https://imagemagick.org/">ImageMagick</a>. Merci à <a href="https://gist.github.com/azam/3b6995a29b9f079282f3">ce&nbsp;gist</a></p>
|
||
<div class="highlight"><pre><span></span><code>convert<span class="w"> </span>-density<span class="w"> </span>256x256<span class="w"> </span>-background<span class="w"> </span>transparent<span class="w"> </span>favicon.svg<span class="w"> </span>-define<span class="w"> </span>icon:auto-resize<span class="w"> </span>-colors<span class="w"> </span><span class="m">256 …</span></code></pre></div></summary><content type="html">
|
||
<p>Il y a plusieurs sites qui permettent de faire ça automatiquement, mais j&#8217;aime bien faire les choses depuis mon terminal, voici donc une commande qui permet de faire ça simplement, en utilisant <a href="https://imagemagick.org/">ImageMagick</a>. Merci à <a href="https://gist.github.com/azam/3b6995a29b9f079282f3">ce&nbsp;gist</a></p>
|
||
<div class="highlight"><pre><span></span><code>convert<span class="w"> </span>-density<span class="w"> </span>256x256<span class="w"> </span>-background<span class="w"> </span>transparent<span class="w"> </span>favicon.svg<span class="w"> </span>-define<span class="w"> </span>icon:auto-resize<span class="w"> </span>-colors<span class="w"> </span><span class="m">256</span><span class="w"> </span>favicon.ico
|
||
</code></pre></div></content><category term="code"></category></entry><entry><title>Découverte de nouveaux outils pour le développement: LLM, Helix et plus</title><link href="https://blog.notmyidea.org/decouverte-de-nouveaux-outils-pour-le-developpement-llm-helix-et-plus.html" rel="alternate"></link><published>2023-09-12T00:00:00+02:00</published><updated>2023-09-12T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-09-12:/decouverte-de-nouveaux-outils-pour-le-developpement-llm-helix-et-plus.html</id><summary type="html">
|
||
<h2 id="llm"><span class="caps">LLM</span></h2>
|
||
<ul>
|
||
<li><a href="https://localai.io/model-compatibility/">LocalAI</a> permet de faire tourner des modèles en local avec la même <span class="caps">API</span> <span class="caps">HTTP</span> que celle&nbsp;d&#8217;OpenAI</li>
|
||
<li><a href="https://github.com/bofenghuang/vigogne">Le modèle Vigogne</a> est un modèle entrainé (<em>fine-tuned</em>) avec des données en Français. Notamment <a href="https://huggingface.co/bofenghuang/vigogne-2-7b-chat/tree/v1.0">ce modèle</a>qui prends <span class="caps">LLAMA2</span> en&nbsp;entrée.</li>
|
||
<li><a href="https://python.langchain.com/docs/get_started/introduction.html">LangChain</a> semble être un framework pour travailler avec les différents …</li></ul></summary><content type="html">
|
||
<h2 id="llm"><span class="caps">LLM</span></h2>
|
||
<ul>
|
||
<li><a href="https://localai.io/model-compatibility/">LocalAI</a> permet de faire tourner des modèles en local avec la même <span class="caps">API</span> <span class="caps">HTTP</span> que celle&nbsp;d&#8217;OpenAI</li>
|
||
<li><a href="https://github.com/bofenghuang/vigogne">Le modèle Vigogne</a> est un modèle entrainé (<em>fine-tuned</em>) avec des données en Français. Notamment <a href="https://huggingface.co/bofenghuang/vigogne-2-7b-chat/tree/v1.0">ce modèle</a>qui prends <span class="caps">LLAMA2</span> en&nbsp;entrée.</li>
|
||
<li><a href="https://python.langchain.com/docs/get_started/introduction.html">LangChain</a> semble être un framework pour travailler avec les différents concepts utiles. A&nbsp;voir.</li>
|
||
</ul>
|
||
<p>Pour la première fois, j&#8217;ai commencé à utiliser un peu plus l&#8217;outil <a href="https://llm.datasette.io">llm</a> pour m&#8217;aider dans les tâches de&nbsp;programmation. </p>
|
||
<p>!! warning
|
||
J&#8217;utilise actuellement par défaut le modèle en ligne d&#8217;OpenAI &#8220;<span class="caps">GTP4</span>&#8221;, à travers leur <span class="caps">API</span>. Cela me pose des problèmes éthiques, mais mon approche est pour le moment de voir le type de résultats que j&#8217;obtiens pour ensuite comparer avec des modèles locaux type <span class="caps">LLAMA2</span>.</p>
|
||
<p>Deux choses que j&#8217;ai trouvées utiles&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>diff<span class="w"> </span><span class="p">|</span><span class="w"> </span>llm<span class="w"> </span><span class="s2">&quot;write me a commit message&quot;</span>
|
||
git<span class="w"> </span>diff<span class="w"> </span><span class="p">|</span><span class="w"> </span>llm<span class="w"> </span><span class="s2">&quot;find a branch name&quot;</span>
|
||
</code></pre></div>
|
||
|
||
<p>Qui peuvent faciliter la vie plutôt que de chercher à décrire des choses manuellement (le &#8220;branch-name&#8221;, je le trouve particulièrement&nbsp;utile)</p>
|
||
<p>J&#8217;ai aussi trouvé l&#8217;idée intéressante d&#8217;automatiser l&#8217;écrite de tests, avec pytest. Bien sur ça ne fait pas tout, mais ça donne un template de départ qui est intéressant&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>cat<span class="w"> </span>code/test_file.py<span class="w"> </span><span class="p">|</span><span class="w"> </span>llm<span class="w"> </span><span class="s2">&quot;write tests for this, using pytest&quot;</span>
|
||
</code></pre></div>
|
||
|
||
<p>J&#8217;ai par exemple demandé à llm de me lister 20 titres pour cet article&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>cat<span class="w"> </span>~/dev/til.notmyidea.org/content/<span class="k">$(</span>date<span class="w"> </span>+%F<span class="k">)</span>.md<span class="w"> </span><span class="p">|</span><span class="w"> </span>llm<span class="w"> </span><span class="s2">&quot;Liste moi 20 titres pour cet article. Quelque chose de simple&quot;</span>
|
||
<span class="m">1</span>.<span class="w"> </span><span class="s2">&quot;Découverte de nouveaux outils pour le développement: LLM, Helix et plus&quot;</span>
|
||
<span class="m">2</span>.<span class="w"> </span><span class="s2">&quot;Explorer les modèles LLM pour la génération de code&quot;</span>
|
||
<span class="m">3</span>.<span class="w"> </span><span class="s2">&quot;L&#39;amélioration du développement grâce à LLM et Helix&quot;</span>
|
||
<span class="m">4</span>.<span class="w"> </span><span class="s2">&quot;Introduction à l&#39;éditeur Helix et à LLM&quot;</span>
|
||
<span class="m">5</span>.<span class="w"> </span><span class="s2">&quot;Boostez votre productivité de développement avec LLM et Helix&quot;</span>
|
||
<span class="m">6</span>.<span class="w"> </span><span class="s2">&quot;Comment j&#39;intègre LLM et Helix dans mon flux de travail de développement&quot;</span>
|
||
<span class="m">7</span>.<span class="w"> </span><span class="s2">&quot;Les avantages de l&#39;utilisation de LLM pour la programmation&quot;</span>
|
||
<span class="m">8</span>.<span class="w"> </span><span class="s2">&quot;Approches innovantes pour le développement de code avec LLM&quot;</span>
|
||
<span class="m">9</span>.<span class="w"> </span><span class="s2">&quot;L&#39;avenir du développement de code avec LLM et Helix&quot;</span>
|
||
<span class="m">10</span>.<span class="w"> </span><span class="s2">&quot;Optimisation des tâches de programmation avec LLM&quot;</span>
|
||
<span class="m">11</span>.<span class="w"> </span><span class="s2">&quot;Ouvrir de nouvelles possibilités de codage avec LLM et Helix&quot;</span>
|
||
<span class="m">12</span>.<span class="w"> </span><span class="s2">&quot;Utiliser des modèles LLM pour améliorer la qualité du code&quot;</span>
|
||
</code></pre></div>
|
||
|
||
<h2 id="helix">Helix</h2>
|
||
<p>Je me mets à tester un peu plus l&#8217;éditeur Helix. Je suis un habitué de Vim pour toutes les petites modifications que je fais depuis mon terminal, et Helix semble&nbsp;intéressant.</p>
|
||
<ul>
|
||
<li><code>x</code>pour sélectionner une ligne (<code>xd</code> pour sélectionner et&nbsp;supprimer)</li>
|
||
<li><code>ma</code> pour sélectionner &#8220;around&#8221; quelque chose. <code>maw</code> pour sélectionner le&nbsp;mot</li>
|
||
<li><code>c</code> pour effacer la sélection et passer en mode&nbsp;insertion.</li>
|
||
</ul>
|
||
<h2 id="divers">Divers</h2>
|
||
<blockquote>
|
||
<p>J’ai fait confiance, j’ai appris.
|
||
— <a href="https://d%C3%A9tour.studio">Thomas</a></p>
|
||
</blockquote>
|
||
<p>J&#8217;aime beaucoup ce que ça dit. Faire confiance est peut-être nécessaire, même si on est déçu au final, on aura au moins appris. Ça me&nbsp;touche.</p></content><category term="code"></category></entry><entry><title>Running the Gitlab CI locally</title><link href="https://blog.notmyidea.org/running-the-gitlab-ci-locally.html" rel="alternate"></link><published>2023-08-19T00:00:00+02:00</published><updated>2023-08-19T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-08-19:/running-the-gitlab-ci-locally.html</id><summary type="html">
|
||
<p>Sometimes, I need to change how the continuous integration is setup, and I find
|
||
myself pushing to a branch to test if my changes are working. Oftentimes, it
|
||
takes me multiple commits to find the correct configuration, which is…&nbsp;suboptimal.</p>
|
||
<p>I discovered today <a href="https://github.com/firecow/gitlab-ci-local">Gitlab <span class="caps">CI</span>
|
||
local</a> which makes it possible …</p></summary><content type="html">
|
||
<p>Sometimes, I need to change how the continuous integration is setup, and I find
|
||
myself pushing to a branch to test if my changes are working. Oftentimes, it
|
||
takes me multiple commits to find the correct configuration, which is…&nbsp;suboptimal.</p>
|
||
<p>I discovered today <a href="https://github.com/firecow/gitlab-ci-local">Gitlab <span class="caps">CI</span>
|
||
local</a> which makes it possible to
|
||
run the <span class="caps">CI</span> actions locally, without having to push to the remote <span class="caps">CI</span>. The same
|
||
thing exists for <a href="https://github.com/nektos/act">Microsoft Github</a>.</p>
|
||
<p>Under the hood, it&#8217;s using Docker, so you need to have it running on your
|
||
system, but once it&#8217;s done, you just have to issue a simple command to see the
|
||
results. Very helpful&nbsp;:-)</p>
|
||
<p>Here is an example&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>gitlab-ci-local<span class="w"> </span><span class="nb">test</span>
|
||
parsing<span class="w"> </span>and<span class="w"> </span>downloads<span class="w"> </span>finished<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">41</span><span class="w"> </span>ms
|
||
<span class="nb">test</span><span class="w"> </span>starting<span class="w"> </span>python:3.8-alpine<span class="w"> </span><span class="o">(</span><span class="nb">test</span><span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>copied<span class="w"> </span>to<span class="w"> </span>docker<span class="w"> </span>volumes<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">4</span>.05<span class="w"> </span>s
|
||
<span class="nb">test</span><span class="w"> </span>$<span class="w"> </span>apk<span class="w"> </span>update<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>apk<span class="w"> </span>add<span class="w"> </span>make<span class="w"> </span>libsass<span class="w"> </span>gcc<span class="w"> </span>musl-dev<span class="w"> </span>g++
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>fetch<span class="w"> </span>https://dl-cdn.alpinelinux.org/alpine/v3.18/main/aarch64/APKINDEX.tar.gz
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>fetch<span class="w"> </span>https://dl-cdn.alpinelinux.org/alpine/v3.18/community/aarch64/APKINDEX.tar.gz
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>v3.18.3-55-g2ee93b9273a<span class="w"> </span><span class="o">[</span>https://dl-cdn.alpinelinux.org/alpine/v3.18/main<span class="o">]</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>v3.18.3-56-g4a3b0382caa<span class="w"> </span><span class="o">[</span>https://dl-cdn.alpinelinux.org/alpine/v3.18/community<span class="o">]</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>OK:<span class="w"> </span><span class="m">19939</span><span class="w"> </span>distinct<span class="w"> </span>packages<span class="w"> </span>available
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">1</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>libgcc<span class="w"> </span><span class="o">(</span><span class="m">12</span>.2.1_git20220924-r10<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">2</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>libstdc++<span class="w"> </span><span class="o">(</span><span class="m">12</span>.2.1_git20220924-r10<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">3</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>libstdc++-dev<span class="w"> </span><span class="o">(</span><span class="m">12</span>.2.1_git20220924-r10<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">4</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>zstd-libs<span class="w"> </span><span class="o">(</span><span class="m">1</span>.5.5-r4<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">5</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>binutils<span class="w"> </span><span class="o">(</span><span class="m">2</span>.40-r7<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">6</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>libgomp<span class="w"> </span><span class="o">(</span><span class="m">12</span>.2.1_git20220924-r10<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">7</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>libatomic<span class="w"> </span><span class="o">(</span><span class="m">12</span>.2.1_git20220924-r10<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">8</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>gmp<span class="w"> </span><span class="o">(</span><span class="m">6</span>.2.1-r3<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">9</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>isl26<span class="w"> </span><span class="o">(</span><span class="m">0</span>.26-r1<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">10</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>mpfr4<span class="w"> </span><span class="o">(</span><span class="m">4</span>.2.0_p12-r0<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">11</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>mpc1<span class="w"> </span><span class="o">(</span><span class="m">1</span>.3.1-r1<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">12</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>gcc<span class="w"> </span><span class="o">(</span><span class="m">12</span>.2.1_git20220924-r10<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">13</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>musl-dev<span class="w"> </span><span class="o">(</span><span class="m">1</span>.2.4-r1<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">14</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>libc-dev<span class="w"> </span><span class="o">(</span><span class="m">0</span>.7.2-r5<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">15</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>g++<span class="w"> </span><span class="o">(</span><span class="m">12</span>.2.1_git20220924-r10<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">16</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>libsass<span class="w"> </span><span class="o">(</span><span class="m">3</span>.6.5-r0<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">(</span><span class="m">17</span>/17<span class="o">)</span><span class="w"> </span>Installing<span class="w"> </span>make<span class="w"> </span><span class="o">(</span><span class="m">4</span>.4.1-r1<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Executing<span class="w"> </span>busybox-1.36.1-r2.trigger
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>OK:<span class="w"> </span><span class="m">246</span><span class="w"> </span>MiB<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">55</span><span class="w"> </span>packages
|
||
<span class="nb">test</span><span class="w"> </span>$<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>pelican
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>pelican-4.8.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">1</span>.4<span class="w"> </span>MB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">1</span>.4/1.4<span class="w"> </span>MB<span class="w"> </span><span class="m">539</span>.9<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>markdown
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>Markdown-3.4.4-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">94</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">94</span>.2/94.2<span class="w"> </span>kB<span class="w"> </span><span class="m">540</span>.1<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>typogrify
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>typogrify-2.0.7.tar.gz<span class="w"> </span><span class="o">(</span><span class="m">12</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Preparing<span class="w"> </span>metadata<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>started
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Preparing<span class="w"> </span>metadata<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>finished<span class="w"> </span>with<span class="w"> </span>status<span class="w"> </span><span class="s1">&#39;done&#39;</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>pelican-search
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>pelican_search-1.1.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">6</span>.6<span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>pelican-neighbors
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>pelican_neighbors-1.2.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">16</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>pelican-webassets
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>pelican_webassets-2.0.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">5</span>.8<span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>libsass
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>libsass-0.22.0.tar.gz<span class="w"> </span><span class="o">(</span><span class="m">316</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">316</span>.3/316.3<span class="w"> </span>kB<span class="w"> </span><span class="m">552</span>.1<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Preparing<span class="w"> </span>metadata<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>started
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Preparing<span class="w"> </span>metadata<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>finished<span class="w"> </span>with<span class="w"> </span>status<span class="w"> </span><span class="s1">&#39;done&#39;</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>docutils&gt;<span class="o">=</span><span class="m">0</span>.16
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>docutils-0.20.1-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">572</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">572</span>.7/572.7<span class="w"> </span>kB<span class="w"> </span><span class="m">549</span>.2<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>rich&gt;<span class="o">=</span><span class="m">10</span>.1
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>rich-13.5.2-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">239</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">239</span>.7/239.7<span class="w"> </span>kB<span class="w"> </span><span class="m">485</span>.3<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>jinja2&gt;<span class="o">=</span><span class="m">2</span>.7
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>Jinja2-3.1.2-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">133</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">133</span>.1/133.1<span class="w"> </span>kB<span class="w"> </span><span class="m">342</span>.6<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>pytz&gt;<span class="o">=</span><span class="m">2020</span>.1
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>pytz-2023.3-py2.py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">502</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">502</span>.3/502.3<span class="w"> </span>kB<span class="w"> </span><span class="m">547</span>.3<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>pygments&gt;<span class="o">=</span><span class="m">2</span>.6
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>Pygments-2.16.1-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">1</span>.2<span class="w"> </span>MB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">1</span>.2/1.2<span class="w"> </span>MB<span class="w"> </span><span class="m">551</span>.4<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>unidecode&gt;<span class="o">=</span><span class="m">1</span>.1
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>Unidecode-1.3.6-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">235</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">235</span>.9/235.9<span class="w"> </span>kB<span class="w"> </span><span class="m">554</span>.2<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>blinker&gt;<span class="o">=</span><span class="m">1</span>.4
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>blinker-1.6.2-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">13</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>python-dateutil&gt;<span class="o">=</span><span class="m">2</span>.8
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>python_dateutil-2.8.2-py2.py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">247</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">247</span>.7/247.7<span class="w"> </span>kB<span class="w"> </span><span class="m">235</span>.7<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>feedgenerator&gt;<span class="o">=</span><span class="m">1</span>.9
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>feedgenerator-2.1.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">21</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>importlib-metadata&gt;<span class="o">=</span><span class="m">4</span>.4
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>importlib_metadata-6.8.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">22</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>smartypants&gt;<span class="o">=</span><span class="m">1</span>.8.3
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>smartypants-2.0.1-py2.py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">9</span>.9<span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>rtoml&lt;<span class="m">0</span>.10.0,&gt;<span class="o">=</span><span class="m">0</span>.9.0
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>rtoml-0.9.0-cp38-cp38-musllinux_1_1_aarch64.whl<span class="w"> </span><span class="o">(</span><span class="m">846</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">846</span>.2/846.2<span class="w"> </span>kB<span class="w"> </span><span class="m">503</span>.7<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>webassets&lt;<span class="m">3</span>.0,&gt;<span class="o">=</span><span class="m">2</span>.0
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>webassets-2.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">142</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">142</span>.9/142.9<span class="w"> </span>kB<span class="w"> </span><span class="m">551</span>.8<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>zipp&gt;<span class="o">=</span><span class="m">0</span>.5
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>zipp-3.16.2-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">7</span>.2<span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>MarkupSafe&gt;<span class="o">=</span><span class="m">2</span>.0
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl<span class="w"> </span><span class="o">(</span><span class="m">30</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>six&gt;<span class="o">=</span><span class="m">1</span>.5
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>six-1.16.0-py2.py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">11</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>markdown-it-py&gt;<span class="o">=</span><span class="m">2</span>.2.0
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>markdown_it_py-3.0.0-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">87</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━<span class="w"> </span><span class="m">87</span>.5/87.5<span class="w"> </span>kB<span class="w"> </span><span class="m">561</span>.7<span class="w"> </span>kB/s<span class="w"> </span>eta<span class="w"> </span><span class="m">0</span>:00:00
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>typing-extensions&lt;<span class="m">5</span>.0,&gt;<span class="o">=</span><span class="m">4</span>.0.0
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>typing_extensions-4.7.1-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">33</span><span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Collecting<span class="w"> </span>mdurl~<span class="o">=</span><span class="m">0</span>.1
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Downloading<span class="w"> </span>mdurl-0.1.2-py3-none-any.whl<span class="w"> </span><span class="o">(</span><span class="m">10</span>.0<span class="w"> </span>kB<span class="o">)</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Building<span class="w"> </span>wheels<span class="w"> </span><span class="k">for</span><span class="w"> </span>collected<span class="w"> </span>packages:<span class="w"> </span>typogrify,<span class="w"> </span>libsass
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Building<span class="w"> </span>wheel<span class="w"> </span><span class="k">for</span><span class="w"> </span>typogrify<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>started
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Building<span class="w"> </span>wheel<span class="w"> </span><span class="k">for</span><span class="w"> </span>typogrify<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>finished<span class="w"> </span>with<span class="w"> </span>status<span class="w"> </span><span class="s1">&#39;done&#39;</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Created<span class="w"> </span>wheel<span class="w"> </span><span class="k">for</span><span class="w"> </span>typogrify:<span class="w"> </span><span class="nv">filename</span><span class="o">=</span>typogrify-2.0.7-py2.py3-none-any.whl<span class="w"> </span><span class="nv">size</span><span class="o">=</span><span class="m">13452</span><span class="w"> </span><span class="nv">sha256</span><span class="o">=</span>4ce329903e807671102eab7fd2bc49765b6efc3a4ae68c82053318b62789083c
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Stored<span class="w"> </span><span class="k">in</span><span class="w"> </span>directory:<span class="w"> </span>/root/.cache/pip/wheels/0b/e9/98/c888501e8dd2166da059e4f8418694de9b50b48a7192712be9
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Building<span class="w"> </span>wheel<span class="w"> </span><span class="k">for</span><span class="w"> </span>libsass<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>started
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Building<span class="w"> </span>wheel<span class="w"> </span><span class="k">for</span><span class="w"> </span>libsass<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>still<span class="w"> </span>running...
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Building<span class="w"> </span>wheel<span class="w"> </span><span class="k">for</span><span class="w"> </span>libsass<span class="w"> </span><span class="o">(</span>setup.py<span class="o">)</span>:<span class="w"> </span>finished<span class="w"> </span>with<span class="w"> </span>status<span class="w"> </span><span class="s1">&#39;done&#39;</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Created<span class="w"> </span>wheel<span class="w"> </span><span class="k">for</span><span class="w"> </span>libsass:<span class="w"> </span><span class="nv">filename</span><span class="o">=</span>libsass-0.22.0-cp38-abi3-linux_aarch64.whl<span class="w"> </span><span class="nv">size</span><span class="o">=</span><span class="m">13710320</span><span class="w"> </span><span class="nv">sha256</span><span class="o">=</span>3dcb4ce97c1aafc179a6343e0f312c17df88e56c4eb647ab54b09ead5ee00b92
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Stored<span class="w"> </span><span class="k">in</span><span class="w"> </span>directory:<span class="w"> </span>/root/.cache/pip/wheels/95/64/fa/47638d5037df216387cdc168e9871d5d9851fc995d636bd108
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Successfully<span class="w"> </span>built<span class="w"> </span>typogrify<span class="w"> </span>libsass
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Installing<span class="w"> </span>collected<span class="w"> </span>packages:<span class="w"> </span>webassets,<span class="w"> </span>smartypants,<span class="w"> </span>pytz,<span class="w"> </span>zipp,<span class="w"> </span>unidecode,<span class="w"> </span>typogrify,<span class="w"> </span>typing-extensions,<span class="w"> </span>six,<span class="w"> </span>rtoml,<span class="w"> </span>pygments,<span class="w"> </span>mdurl,<span class="w"> </span>MarkupSafe,<span class="w"> </span>libsass,<span class="w"> </span>feedgenerator,<span class="w"> </span>docutils,<span class="w"> </span>blinker,<span class="w"> </span>python-dateutil,<span class="w"> </span>markdown-it-py,<span class="w"> </span>jinja2,<span class="w"> </span>importlib-metadata,<span class="w"> </span>rich,<span class="w"> </span>markdown,<span class="w"> </span>pelican,<span class="w"> </span>pelican-webassets,<span class="w"> </span>pelican-search,<span class="w"> </span>pelican-neighbors
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Successfully<span class="w"> </span>installed<span class="w"> </span>MarkupSafe-2.1.3<span class="w"> </span>blinker-1.6.2<span class="w"> </span>docutils-0.20.1<span class="w"> </span>feedgenerator-2.1.0<span class="w"> </span>importlib-metadata-6.8.0<span class="w"> </span>jinja2-3.1.2<span class="w"> </span>libsass-0.22.0<span class="w"> </span>markdown-3.4.4<span class="w"> </span>markdown-it-py-3.0.0<span class="w"> </span>mdurl-0.1.2<span class="w"> </span>pelican-4.8.0<span class="w"> </span>pelican-neighbors-1.2.0<span class="w"> </span>pelican-search-1.1.0<span class="w"> </span>pelican-webassets-2.0.0<span class="w"> </span>pygments-2.16.1<span class="w"> </span>python-dateutil-2.8.2<span class="w"> </span>pytz-2023.3<span class="w"> </span>rich-13.5.2<span class="w"> </span>rtoml-0.9.0<span class="w"> </span>six-1.16.0<span class="w"> </span>smartypants-2.0.1<span class="w"> </span>typing-extensions-4.7.1<span class="w"> </span>typogrify-2.0.7<span class="w"> </span>unidecode-1.3.6<span class="w"> </span>webassets-2.0<span class="w"> </span>zipp-3.16.2
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>WARNING:<span class="w"> </span>Running<span class="w"> </span>pip<span class="w"> </span>as<span class="w"> </span>the<span class="w"> </span><span class="s1">&#39;root&#39;</span><span class="w"> </span>user<span class="w"> </span>can<span class="w"> </span>result<span class="w"> </span><span class="k">in</span><span class="w"> </span>broken<span class="w"> </span>permissions<span class="w"> </span>and<span class="w"> </span>conflicting<span class="w"> </span>behaviour<span class="w"> </span>with<span class="w"> </span>the<span class="w"> </span>system<span class="w"> </span>package<span class="w"> </span>manager.<span class="w"> </span>It<span class="w"> </span>is<span class="w"> </span>recommended<span class="w"> </span>to<span class="w"> </span>use<span class="w"> </span>a<span class="w"> </span>virtual<span class="w"> </span>environment<span class="w"> </span>instead:<span class="w"> </span>https://pip.pypa.io/warnings/venv
|
||
<span class="nb">test</span><span class="w"> </span>&gt;
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">[</span>notice<span class="o">]</span><span class="w"> </span>A<span class="w"> </span>new<span class="w"> </span>release<span class="w"> </span>of<span class="w"> </span>pip<span class="w"> </span>is<span class="w"> </span>available:<span class="w"> </span><span class="m">23</span>.0.1<span class="w"> </span>-&gt;<span class="w"> </span><span class="m">23</span>.2.1
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="o">[</span>notice<span class="o">]</span><span class="w"> </span>To<span class="w"> </span>update,<span class="w"> </span>run:<span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>--upgrade<span class="w"> </span>pip
|
||
<span class="nb">test</span><span class="w"> </span>$<span class="w"> </span>make<span class="w"> </span>publish
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span><span class="s2">&quot;pelican&quot;</span><span class="w"> </span><span class="s2">&quot;/gcl-builds/content&quot;</span><span class="w"> </span>-o<span class="w"> </span><span class="s2">&quot;/gcl-builds/public&quot;</span><span class="w"> </span>-s<span class="w"> </span><span class="s2">&quot;/gcl-builds/publishconf.py&quot;</span>
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>Done:<span class="w"> </span>Processed<span class="w"> </span><span class="m">5</span><span class="w"> </span>articles,<span class="w"> </span><span class="m">0</span><span class="w"> </span>drafts,<span class="w"> </span><span class="m">0</span><span class="w"> </span>hidden<span class="w"> </span>articles,<span class="w"> </span><span class="m">2</span><span class="w"> </span>pages,<span class="w"> </span><span class="m">0</span><span class="w"> </span>hidden<span class="w"> </span>pages
|
||
<span class="nb">test</span><span class="w"> </span>&gt;<span class="w"> </span>and<span class="w"> </span><span class="m">0</span><span class="w"> </span>draft<span class="w"> </span>pages<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">0</span>.50<span class="w"> </span>seconds.
|
||
<span class="nb">test</span><span class="w"> </span>finished<span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">6</span><span class="w"> </span>min
|
||
PASS<span class="w"> </span><span class="nb">test</span>
|
||
</code></pre></div></content><category term="code"></category><category term="gitlab"></category><category term="docker"></category></entry><entry><title>ArchLinux et mise à jour du keyring</title><link href="https://blog.notmyidea.org/archlinux-et-mise-a-jour-du-keyring.html" rel="alternate"></link><published>2023-08-18T00:00:00+02:00</published><updated>2023-08-18T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-08-18:/archlinux-et-mise-a-jour-du-keyring.html</id><summary type="html">
|
||
<p>Pour les mises à jour Arch, j&#8217;utilise <a href="https://github.com/Jguer/yay">yay</a>. Je
|
||
ne fais les mises à jour que de manière semi-régulière, et parfois après une
|
||
longue période je me retrouve avec des soucis de clé qui ne sont plus à jour ou&nbsp;manquantes.</p>
|
||
<p>Avec une utilisation fréquente du système, aucun problème …</p></summary><content type="html">
|
||
<p>Pour les mises à jour Arch, j&#8217;utilise <a href="https://github.com/Jguer/yay">yay</a>. Je
|
||
ne fais les mises à jour que de manière semi-régulière, et parfois après une
|
||
longue période je me retrouve avec des soucis de clé qui ne sont plus à jour ou&nbsp;manquantes.</p>
|
||
<p>Avec une utilisation fréquente du système, aucun problème ne se pose car un
|
||
service s&#8217;occupe de faire la mise à jour des clés de manière&nbsp;automatique.</p>
|
||
<p>Pour résoudre le souci, il suffit de mettre à jour le paquet
|
||
<code>archlinux-keyring</code>, comme décrit <a href="https://wiki.archlinux.org/title/Pacman/Package_signing">dans la page Wiki qui va
|
||
bien</a>.</p>
|
||
<div class="highlight"><pre><span></span><code>sudo pacman -S archlinux-keyring
|
||
</code></pre></div></content><category term="code"></category><category term="arch-linux"></category></entry><entry><title>Python packaging with Hatch, pipx and Zsh environment variables</title><link href="https://blog.notmyidea.org/python-packaging-with-hatch-pipx-and-zsh-environment-variables.html" rel="alternate"></link><published>2023-08-17T00:00:00+02:00</published><updated>2023-08-17T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-08-17:/python-packaging-with-hatch-pipx-and-zsh-environment-variables.html</id><summary type="html">
|
||
<p>It&#8217;s been a while I didn&#8217;t packaged something new. I recently remembered an old
|
||
package of mine that needed some attention :
|
||
<a href="https://gitlab.com/almet/debts">debts</a>. It&#8217;s now time to package it, so I
|
||
discovered <a href="https://hatch.pypa.io/">hatch</a></p>
|
||
<p>hatch new&nbsp;&#8212;init</p>
|
||
<p>This does the heavy-lifting for you, actually porting the <code>setup.py</code> files …</p></summary><content type="html">
|
||
<p>It&#8217;s been a while I didn&#8217;t packaged something new. I recently remembered an old
|
||
package of mine that needed some attention :
|
||
<a href="https://gitlab.com/almet/debts">debts</a>. It&#8217;s now time to package it, so I
|
||
discovered <a href="https://hatch.pypa.io/">hatch</a></p>
|
||
<p>hatch new&nbsp;&#8212;init</p>
|
||
<p>This does the heavy-lifting for you, actually porting the <code>setup.py</code> files to the
|
||
new way of packaging with python (with a <code>pyproject.toml</code> file)</p>
|
||
<p>Then <code>hatch shell</code> will create a development environment, install dependencies,
|
||
check the <code>pyproject.toml</code> file in one command, and give you a shell to test
|
||
whatever you need to&nbsp;test.</p>
|
||
<h2 id="isolating-system-packages">Isolating system&nbsp;packages</h2>
|
||
<p>I discovered that <a href="https://github.com/pypa/pipx">pipx</a> is a convenient way to
|
||
install user-facing applications on my system. I use multiple virtual
|
||
environments for my different projects, but not for the install that are used&nbsp;system-wide.</p>
|
||
<p>pipx seems to solve this, and avoid using <code>sudo pip install x</code>.</p>
|
||
<h2 id="manipulating-env-variables-with-zsh">Manipulating env variables with&nbsp;Zsh</h2>
|
||
<p>I use <a href="https://www.zsh.org/">Zsh</a> as my main shell for years, and I just
|
||
discovered that it&#8217;s possible to manipulate environment variables in an easy&nbsp;way.</p>
|
||
<p>If you&#8217;re like me, you never remember how to add something to your path. You
|
||
can actually use <code>+=</code>, like&nbsp;this:</p>
|
||
<div class="highlight"><pre><span></span><code><span class="nv">path</span><span class="o">+=(</span><span class="s1">&#39;/Users/alexis/.local/bin&#39;</span><span class="o">)</span>
|
||
<span class="nb">export</span><span class="w"> </span>PATH
|
||
</code></pre></div></content><category term="code"></category><category term="python"></category><category term="packaging"></category><category term="zsh"></category></entry><entry><title>Profiling and speeding up Django and Pytest</title><link href="https://blog.notmyidea.org/profiling-and-speeding-up-django-and-pytest.html" rel="alternate"></link><published>2023-08-16T00:00:00+02:00</published><updated>2023-08-16T00:00:00+02:00</updated><author><name></name></author><id>tag:blog.notmyidea.org,2023-08-16:/profiling-and-speeding-up-django-and-pytest.html</id><summary type="html">
|
||
<p><a href="https://yaal.coop/">Éloi</a> made <a href="https://github.com/spiral-project/ihatemoney/issues/1214">a pull request on
|
||
IHateMoney</a> to
|
||
speedup the tests, with some great tooling for pytest that I wasn&#8217;t aware&nbsp;of:</p>
|
||
<ul>
|
||
<li><a href="https://pypi.org/project/pytest-xdist/">pytest-xdist</a> allows to run tests in
|
||
parallel, using <code>-n auto</code></li>
|
||
<li><a href="https://pypi.org/project/pytest-profiling/">pytest-profiling</a> makes it easy
|
||
to get the call stack and time the function calls that take most …</li></ul></summary><content type="html">
|
||
<p><a href="https://yaal.coop/">Éloi</a> made <a href="https://github.com/spiral-project/ihatemoney/issues/1214">a pull request on
|
||
IHateMoney</a> to
|
||
speedup the tests, with some great tooling for pytest that I wasn&#8217;t aware&nbsp;of:</p>
|
||
<ul>
|
||
<li><a href="https://pypi.org/project/pytest-xdist/">pytest-xdist</a> allows to run tests in
|
||
parallel, using <code>-n auto</code></li>
|
||
<li><a href="https://pypi.org/project/pytest-profiling/">pytest-profiling</a> makes it easy
|
||
to get the call stack and time the function calls that take most of the&nbsp;time.</li>
|
||
<li>You can them analyse the <code>.prof</code> files with
|
||
<a href="https://pypi.org/project/snakeviz/">Snakeviz</a></li>
|
||
</ul>
|
||
<p>So, I spent some time using these on the tests for <a href="https://chariotte.fr">La
|
||
Chariotte</a>, because they were&nbsp;slow.</p>
|
||
<p>I found two things&nbsp;:</p>
|
||
<ul>
|
||
<li>Login calls are costly in the test, and it&#8217;s possible to speed things up&nbsp;;</li>
|
||
<li>On my machine, calls to resolve my hostname were slow, using 5s during the
|
||
tests for a lookup that wasn&#8217;t even&nbsp;useful.</li>
|
||
</ul>
|
||
<h2 id="changing-the-hashing-algorithm-to-speedup-tests">Changing the hashing algorithm to speedup&nbsp;tests</h2>
|
||
<p>By default, Django uses a slow (but secure !) hashing mechanism for checking
|
||
the user credentials. In the tests, we don&#8217;t need this security, but we need
|
||
the&nbsp;speed.</p>
|
||
<p>Changing them to use <span class="caps">MD5</span> turns out to be a way to greatly speed them up! Here
|
||
is how to do it with a pytest fixture&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||
<span class="k">def</span> <span class="nf">password_hasher_setup</span><span class="p">(</span><span class="n">settings</span><span class="p">):</span>
|
||
<span class="c1"># Use a weaker password hasher during tests, for speed</span>
|
||
<span class="n">settings</span><span class="o">.</span><span class="n">PASSWORD_HASHERS</span> <span class="o">=</span> <span class="p">[</span>
|
||
<span class="s2">&quot;django.contrib.auth.hashers.MD5PasswordHasher&quot;</span><span class="p">,</span>
|
||
<span class="p">]</span>
|
||
</code></pre></div>
|
||
|
||
<h2 id="speeding-dns-lookups">Speeding <span class="caps">DNS</span>&nbsp;lookups</h2>
|
||
<p>I&#8217;m currently using a MacOSX machine, and for for whatever reason, the local
|
||
lookup was not configured properly on my machine. I don&#8217;t think I did anything
|
||
specific to get this wrong, so it might be your case too. Calls to resolve the
|
||
local domain were tooking&nbsp;5s.</p>
|
||
<p>If the answer to <code>scutil --get LocalHostName</code>, <code>hostname</code> and <code>scutil --get
|
||
HostName</code> differ, then you might be in this case. Here is the fix&nbsp;:</p>
|
||
<div class="highlight"><pre><span></span><code>sudo<span class="w"> </span>scutil<span class="w"> </span>--set<span class="w"> </span>HostName<span class="w"> </span>&lt;YourHostName&gt;
|
||
</code></pre></div></content><category term="code"></category><category term="django"></category><category term="pytest"></category></entry></feed> |