<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>docs.pelican.bernatchez.net - python</title><link href="https://docs.pelican.bernatchez.net/lang-version.fr/" rel="alternate"/><link href="https://docs.pelican.bernatchez.net/lang-version.fr/feeds/python.atom.xml" rel="self"/><id>https://docs.pelican.bernatchez.net/lang-version.fr/</id><updated>2025-05-24T18:23:52+00:00</updated><entry><title>Configurer un index de package privé de projet</title><link href="https://docs.pelican.bernatchez.net/lang-version.fr/personal-pypi-fr.html" rel="alternate"/><published>2025-05-24T18:23:52+00:00</published><updated>2025-05-24T18:23:52+00:00</updated><author><name>Pierre Bernatchez</name></author><id>tag:docs.pelican.bernatchez.net,2025-05-24:/lang-version.fr/personal-pypi-fr.html</id><summary type="html">&lt;p class="first last"&gt;Configuration de l'index de package Primate DevPI pour nos packages.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;strong&gt;Aperçu&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ce document décrit la configuration d'un index de package privé comme un moyen plus pratique de distribuer des packages Python.&lt;/p&gt;
&lt;p&gt;La nécessité d'utiliser quelque chose comme celle-ci se développe à mesure que nous ajoutons des mainteneurs et des packages à maintenir.&lt;/p&gt;
&lt;p&gt;Nos packages Python doivent être compatisés avec l'index de package Python standard PYPI.&lt;/p&gt;
&lt;p&gt;Nous utilisons un index de packages privé jusqu'à ce que nous soyons prêts à mettre un colis à la disposition du grand public,
Ensuite, nous passons à PYPI.&lt;/p&gt;
&lt;p&gt;Cet outil que nous utilisons maintient nos packages compatibles avec PYPI lorsque nous le mettons à la disposition là-bas.&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://devpi.net/docs/devpi/devpi/stable/+doc/quickstart-releaseprocess.html"&gt;devpi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Il s'agit d'un système d'index de package conforme.&lt;/p&gt;
&lt;p&gt;Nous l'utiliserons pour servir notre index de package privé.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="section" id="configuration-du-sw-pour-devpi"&gt;
&lt;h2&gt;Configuration du SW pour DevPI&lt;/h2&gt;
&lt;p&gt;Ce howto est dérivé du tutoriel suivant:&lt;/p&gt;
&lt;p&gt;&amp;lt;&lt;a class="reference external" href="https://devpi.net/docs/devpi/devpi/stable/+doc/quickstart-releaseprocess.html"&gt;https://devpi.net/docs/devpi/devpi/stable/+doc/quickstart-releaseprocess.html&lt;/a&gt;&amp;gt; _&lt;/p&gt;
&lt;p&gt;Nous travaillons avec Python3.
Nous voulons configurer un environnement virtuel conforme à nos hypothèses, puis installer à l'intérieur.
Nous appelons l'environnement devpi_venv.
Nous créons d'abord un répertoire pour notre configuration.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/devpi_setup
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/devpi_setup
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous installons les éléments essentiels nus.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python3&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;venv&lt;span class="w"&gt; &lt;/span&gt;devpi_venv
&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;devpi_venv/bin/activate
python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;pip
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;wheel
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;setuptools
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;twine
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;RESTVIEW&lt;/em&gt; est une visionneuse de format de texte restructuré que je trouve utile.(facultatif)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;restview
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous l'invoquez et il continue de réintégrer votre fichier lorsque vous le modifiez.&lt;/p&gt;
&lt;p&gt;Comme ça:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;restview&lt;span class="w"&gt; &lt;/span&gt;README.rst
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;rst2pdf&lt;/em&gt; est pratique pour générer des copies PDF de documants.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;rst2pdf
rst2pdf&lt;span class="w"&gt; &lt;/span&gt;doc/privatepypi.rst&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;reformatted_docs/privatepypi.pdf
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="configurez-le-serveur-devpi-sur-notre-ordinateur-portable"&gt;
&lt;h2&gt;Configurez le serveur DevPI sur notre ordinateur portable&lt;/h2&gt;
&lt;p&gt;Installez le client et le serveur Web DevPI
Le serveur non Web - DevPI-Server - est installé en conséquence.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;devpi-web&lt;span class="w"&gt; &lt;/span&gt;devpi-client
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Initialiser un index vide (AT / var / devpi-serveur par défaut)
Remarque J'ai eu un problème d'autorisation avec celui init.
Alors d'abord je fais manuellement ceci:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt;  &lt;/span&gt;/var/devpi-server
sudo&lt;span class="w"&gt; &lt;/span&gt;chown&lt;span class="w"&gt; &lt;/span&gt;ubuntu:ubuntu&lt;span class="w"&gt; &lt;/span&gt;/var/devpi-server
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;devpi-init
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous voulons un fichier de configuration pour le démon de superviseur à utiliser.
Cela générera un tas de fichiers de configuration sous le courant
Répertoire, celui que nous voulons inclus.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/devpi_setup
devpi-gen-config
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela nous donne le fichier gen-config / supervisor-devpi.conf
pour copier sur / etc / superviseur / conf pour que nous puissions commencer
augmentez le serveur.J'ai commencé par le modifier pour dire
start = false pour qu'il devrait être démarré
Up manuellement.Ensuite, je l'ai copié au bon endroit pour cela.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;gen-config/supervisor-devpi.conf&lt;span class="w"&gt; &lt;/span&gt;/etc/supervisor/conf.d/devpi-server.conf
sudo&lt;span class="w"&gt; &lt;/span&gt;supervisorctl&lt;span class="w"&gt; &lt;/span&gt;update
sudo&lt;span class="w"&gt; &lt;/span&gt;supervisorctl&lt;span class="w"&gt; &lt;/span&gt;start&lt;span class="w"&gt; &lt;/span&gt;devpi-server
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Créez un utilisateur, connectez-vous comme lui et créez l'index 'dev'&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;devpi&lt;span class="w"&gt; &lt;/span&gt;user&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;pbernatchez&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;foobar
devpi&lt;span class="w"&gt; &lt;/span&gt;login&lt;span class="w"&gt; &lt;/span&gt;pbernatchez&lt;span class="w"&gt; &lt;/span&gt;--password&lt;span class="o"&gt;=&lt;/span&gt;foobar
devpi&lt;span class="w"&gt; &lt;/span&gt;index&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;dev&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;bases&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root/pypi
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Utilisez notre index de développement&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;devpi&lt;span class="w"&gt; &lt;/span&gt;use&lt;span class="w"&gt; &lt;/span&gt;testuser/dev
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous pouvons désormais uriliaer l'index privé.&lt;/p&gt;
&lt;p&gt;Nous utilisons Flit pour publier sur notre index et
repose sur le fichier: ~ / .pypirc.&lt;/p&gt;
&lt;p&gt;Nous y faisons donc une entrée pour notre index.Je lui ai donné le nom «myPyPi»:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;[distutils]
index-servers =
   mypypi
   testpypi

[mypypi]
repository = http://localhost:3141/pbernatchez/dev
username = pbernatchez

[testpypi]
repository = https://test.pypi.org/legacy/
username = pbernatchez
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;À partir de maintenant, en utilisant Flit, nous pouvons le désigner «myPyPi».&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;deactivate
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/home/ubuntu/allrepos/animbboard
&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/venv_animbboard/bin/activate
flit&lt;span class="w"&gt; &lt;/span&gt;build
flit&lt;span class="w"&gt; &lt;/span&gt;publish&lt;span class="w"&gt; &lt;/span&gt;--repository&lt;span class="w"&gt; &lt;/span&gt;mypypi
pip&lt;span class="w"&gt; &lt;/span&gt;uninstall&lt;span class="w"&gt;  &lt;/span&gt;animbboard
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;http://localhost:3141/pbernatchez/dev&lt;span class="w"&gt;  &lt;/span&gt;animbboard
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</content><category term="python"/><category term="python"/><category term="package"/><category term="index"/><category term="distribution"/><category term="logiciel"/><category term="déploiement"/><category term="révision"/><category term="comment faire"/></entry><entry><title>Set up a private package index</title><link href="https://docs.pelican.bernatchez.net/lang-version.fr/privatepypi-fr.html" rel="alternate"/><published>2025-05-24T18:23:52+00:00</published><updated>2025-05-24T18:23:52+00:00</updated><author><name>Pierre Bernatchez</name></author><id>tag:docs.pelican.bernatchez.net,2025-05-24:/lang-version.fr/privatepypi-fr.html</id><summary type="html">&lt;p class="first last"&gt;set up a private package index&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="overview"&gt;
&lt;h2&gt;Overview&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;At this writing our current practise is to generate versioned
tarballs and to 'pip install' from those.&lt;/p&gt;
&lt;p&gt;This describes setting up a private package index as a more
convenient alternative to using tarballs directly.&lt;/p&gt;
&lt;p&gt;Our python software needs to be kept compatible with the standard
python package index for when we desire to offer it to the general
public.&lt;/p&gt;
&lt;p&gt;To ensure we are staying compatible with pypi, we need to run it
through the process, but with a conforming private packaging
index.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;devpi&lt;/strong&gt; to the rescue ('&lt;a class="reference external" href="https://www.devpi.net/"&gt;https://www.devpi.net/&lt;/a&gt;') .&lt;/p&gt;
&lt;p&gt;It is a conforming package index system we can use to serve our
private packages whithout releasing them to the public.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section" id="configuring-the-sw-for-devpi"&gt;
&lt;h2&gt;Configuring the SW for  devpi&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;This information is derived from the following tutorial:&lt;/p&gt;
&lt;p&gt;&amp;lt;&lt;a class="reference external" href="https://devpi.net/docs/devpi/devpi/stable/+doc/quickstart-releaseprocess.html"&gt;https://devpi.net/docs/devpi/devpi/stable/+doc/quickstart-releaseprocess.html&lt;/a&gt;&amp;gt;_&lt;/p&gt;
&lt;p&gt;We start by creating a virtual environment called &amp;quot;venv_devpi&amp;quot; by
following the steps described in the document virtualenv.&lt;/p&gt;
&lt;p&gt;Then we activate that environment and continue with the steps below.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section" id="set-up-devpi-server-on-our-laptop"&gt;
&lt;h2&gt;Set up devpi server on our laptop&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Install a devpi client and web server&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;devpi-web&lt;span class="w"&gt; &lt;/span&gt;devpi-client
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
The non-web server - devpi-server - is also installed as a side effect.
&lt;/pre&gt;
&lt;p&gt;We must avoid needing sudo to access the index, so instead we change
ownership from root to the logged in user. We also need to make sure
supervisor runs our server as that user.&lt;/p&gt;
&lt;p&gt;First manually do this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/var/devpi-server
sudo&lt;span class="w"&gt; &lt;/span&gt;chown&lt;span class="w"&gt; &lt;/span&gt;-R&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;logname&lt;span class="k"&gt;)&lt;/span&gt;:&lt;span class="k"&gt;$(&lt;/span&gt;logname&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/var/devpi-server
ls&lt;span class="w"&gt; &lt;/span&gt;-ld&lt;span class="w"&gt; &lt;/span&gt;/var/devpi-server
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Initialize an empty index (at /var/devpi-server by default)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;devpi-init
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Make a place to put our configuration data files:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/devpi_setup
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The following will generate a bunch of config files, one of which we
will need, under the current directory. Putting that stuff in
${HOME}/devpi_setup.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;pushd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;/dev/null
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/devpi_setup
devpi-gen-config
&lt;span class="nb"&gt;popd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&amp;gt;/dev/null
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
This gave us the file  ${HOME}/devpi_setup/gen-config/supervisor-devpi.conf
as a config file to start up our pypi server.  Start by editing
it manually to say autostart=False so that it will need to be
started up manually.
&lt;/pre&gt;
&lt;p&gt;Append a line like &amp;quot;user = username&amp;quot; to the configuration so it
launches as that user, the same user as above.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;logname&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/devpi_setup/gen-config/supervisor-devpi.conf
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Copy the config where where it needs to be, then start our server.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/devpi_setup/gen-config/supervisor-devpi.conf&lt;span class="w"&gt; &lt;/span&gt;/etc/supervisor/conf.d/supervisor-devpi.conf
sudo&lt;span class="w"&gt; &lt;/span&gt;supervisorctl&lt;span class="w"&gt; &lt;/span&gt;update
sudo&lt;span class="w"&gt; &lt;/span&gt;supervisorctl&lt;span class="w"&gt; &lt;/span&gt;start&lt;span class="w"&gt; &lt;/span&gt;devpi-server
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Create a user (within the server), login as that user and create the 'bzdev' index&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;devpi&lt;span class="w"&gt; &lt;/span&gt;use&lt;span class="w"&gt; &lt;/span&gt;http://localhost:3141
devpi&lt;span class="w"&gt; &lt;/span&gt;user&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;pbernatchez&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dummy
devpi&lt;span class="w"&gt; &lt;/span&gt;login&lt;span class="w"&gt; &lt;/span&gt;pbernatchez&lt;span class="w"&gt; &lt;/span&gt;--password&lt;span class="o"&gt;=&lt;/span&gt;dummy
devpi&lt;span class="w"&gt; &lt;/span&gt;index&lt;span class="w"&gt; &lt;/span&gt;-c&lt;span class="w"&gt; &lt;/span&gt;bzdev&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;bases&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root/pypi
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Use our bzdev index&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;devpi&lt;span class="w"&gt; &lt;/span&gt;use&lt;span class="w"&gt; &lt;/span&gt;pbernatchez/bzdev
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we can make use of our private index.&lt;/p&gt;
&lt;p&gt;We are using flit to publish to our index and it
relies on the file : ~/.pypirc.&lt;/p&gt;
&lt;p&gt;For pip I named it 'bzdevpi'.
So we make an entry there for our index:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
[distutils]
index-servers =
   bzdevpi
   testpypi

[bzdevpi]
repository = http://localhost:3141/pbernatchez/bzdev
username = pbernatchez

[testpypi]
repository = https://test.pypi.org/legacy/
username = pbernatchez
&lt;/pre&gt;
&lt;p&gt;From here on, using flit,&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;To publish,&lt;/div&gt;
&lt;div class="line"&gt;flit publish --repository bzdevpi&lt;/div&gt;
&lt;div class="line"&gt;To install,&lt;/div&gt;
&lt;div class="line"&gt;pip install -i &lt;a class="reference external" href="http://localhost:3141/pbernatchez/bzdev"&gt;http://localhost:3141/pbernatchez/bzdev&lt;/a&gt;   foobar&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;deactivate
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/home/ubuntu/allrepos/wait_ssh
&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/venv_generic/bin/activate
flit&lt;span class="w"&gt; &lt;/span&gt;build
flit&lt;span class="w"&gt; &lt;/span&gt;publish&lt;span class="w"&gt; &lt;/span&gt;--repository&lt;span class="w"&gt; &lt;/span&gt;bzdevpi
pip&lt;span class="w"&gt; &lt;/span&gt;uninstall&lt;span class="w"&gt; &lt;/span&gt;wait_ssh
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;http://localhost:3141/pbernatchez/bzdev&lt;span class="w"&gt; &lt;/span&gt;wait_ssh
&lt;/pre&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
</content><category term="python"/><category term="python"/><category term="package"/><category term="index"/><category term="distribution"/><category term="logiciel"/><category term="déploiement"/><category term="révision"/><category term="comment faire"/></entry><entry><title>Configurer un environnement virtuel python</title><link href="https://docs.pelican.bernatchez.net/lang-version.fr/venv-fr.html" rel="alternate"/><published>2025-05-24T18:23:52+00:00</published><updated>2025-05-24T18:23:52+00:00</updated><author><name>Pierre Bernatchez</name></author><id>tag:docs.pelican.bernatchez.net,2025-05-24:/lang-version.fr/venv-fr.html</id><summary type="html">&lt;p class="first last"&gt;Configurer un environnement virtuel python&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;strong&gt;Assurez-vous que la version du système Ubuntu est suffisamment récente&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;lsb_release&lt;span class="w"&gt; &lt;/span&gt;-a
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Résultat&lt;/p&gt;
&lt;pre class="literal-block"&gt;
Distributor ID:     Ubuntu

Description:        Ubuntu 24.04.3 LTS

Release:            24.04

Codename:           noble
&lt;/pre&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python3&lt;span class="w"&gt; &lt;/span&gt;-V
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Résultat&lt;/p&gt;
&lt;dl class="docutils"&gt;
&lt;dt&gt;::&lt;/dt&gt;
&lt;dd&gt;Python 3.12.3&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;strong&gt;Créer une base pour tous nos environnements virtuels&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.venv
&lt;span class="c1"&gt;# Nous pouvons maintenant créer tous nos environnements virtuels sous ${HOME}/.venv/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Créer un environnement virtuel Python&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Ici, nous appelons notre premier environnement devpi&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.venv/
python3&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;venv&lt;span class="w"&gt; &lt;/span&gt;devpi
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;OU en utilisant venvwrapper&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkvenv&lt;span class="w"&gt; &lt;/span&gt;devpi
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une fois notre environnement créé, on peut installer les éléments nécessaires pour commencer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Activez-le&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.venv/devpi/bin/activate
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;OU en utilisant venvwrapper&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;venv&lt;span class="w"&gt; &lt;/span&gt;devpi
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Installer les bases&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# installer&lt;/span&gt;
python&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;pip
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;wheel
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;setuptools
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;twine
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;rst2pdf
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;flit

&lt;span class="c1"&gt;# désactiver&lt;/span&gt;
deactivate
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Garder les pré-requis&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Une fois votre environnement virtuel terminé, il est conseillé d'enregistrer le contexte.
On peut  ensuite restaurer rapidement l´environnement virtuel à partir de zéro si nécessaire.&lt;/p&gt;
&lt;p&gt;Pendant actif&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;freeze&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;requirements.txt

&lt;span class="c1"&gt;# It may be a good idea to keep such files under version control.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Recupérer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pendant actif&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;requirements.txt
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Activation Automatique&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Souvent nous souhaitons activer un projet à chaque connexion.
Nous pouvons le faire automatiquement en ajoutant un élément come ceci à .bashrc et/ou à .profile.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Ajouté pour activation automatique de l´environment virtuel.&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.venv/devpi/bin/activate&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.venv/devpi/bin/activate
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;OU en utilisant venvwrapper&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Ajouté pour activation automatique de l´environment virtuel.&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="nv"&gt;VENV_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.venv
&lt;span class="nv"&gt;venv_wrapper&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;which&lt;span class="w"&gt; &lt;/span&gt;venvwrapper.sh&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$venv_wrapper&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$venv_wrapper&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;venv&lt;span class="w"&gt; &lt;/span&gt;devpi
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</content><category term="python"/><category term="ubuntu"/><category term="python"/><category term="package"/><category term="distribution"/><category term="logiciel"/><category term="déploiement"/><category term="environnement virtuel"/><category term="comment faire"/></entry><entry><title>python virtual environment</title><link href="https://docs.pelican.bernatchez.net/lang-version.fr/virtualenv-fr.html" rel="alternate"/><published>2025-05-24T18:23:52+00:00</published><updated>2025-05-24T18:23:52+00:00</updated><author><name>Pierre Bernatchez</name></author><id>tag:docs.pelican.bernatchez.net,2025-05-24:/lang-version.fr/virtualenv-fr.html</id><summary type="html">&lt;p class="first last"&gt;set up a python virtual environment&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;strong&gt;Python Virtual Environment Setup&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To have a good control over pre-requisite library modules for our
software, we run in a python virtual environment.&lt;/p&gt;
&lt;p&gt;That means that whenever you want to use or maintain the software
you must first activate that virtual environment like this:
(replace 'generic' with an existing project environment name)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/venv_generic/bin/activate
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once active you can deactivate it like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;deactivate
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="section" id="installation"&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;We install any non pip packages we rely on, if any, first.
Then we install virtualenv.
Then we create a virtual environment.
Then we activate it.&lt;/p&gt;
&lt;p&gt;Install virtualenv itself.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;update
sudo&lt;span class="w"&gt; &lt;/span&gt;apt&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;virtualenv
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Install a .rst to .pdf converter.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;snap&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;rst2pdf
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Create a virtual environment for the project&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;virtualenv&lt;span class="w"&gt; &lt;/span&gt;--prompt&lt;span class="w"&gt; &lt;/span&gt;venv_generic&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/venv_generic
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then activate the created environment&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/venv_generic/bin/activate
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we install modules our project will need, first pip itself and the
tools it needs.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;python3&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-U&lt;span class="w"&gt; &lt;/span&gt;pip
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;wheel
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;setuptools
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;twine
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We are using flit for building and installling our software.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;flit
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="saving-prerequisites"&gt;
&lt;h2&gt;Saving prerequisites&lt;/h2&gt;
&lt;p&gt;We keep our dependencies under version control, so each time
we install more components we need to refresh our requirements
file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;freeze&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/allrepos/generic/requirements.txt
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="reinstalling"&gt;
&lt;h2&gt;Reinstalling&lt;/h2&gt;
&lt;p&gt;Later, when we are migrating to a different workstation, or for some
reason need to restablish our project from scratch, we can install all
our prerequisites in one shot instead of installing items one at a
time like we did above.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;-r&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/allrepos/generic/requirements.txt
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="automatic-activation"&gt;
&lt;h2&gt;Automatic activation&lt;/h2&gt;
&lt;p&gt;In many cases we want to activate a project whenver we log in, so lets
do that automatically.&lt;/p&gt;
&lt;p&gt;Append this snippet to the end of our &amp;quot;${HOME}/.bashrc&amp;quot; file.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="c1"&gt;# Added for automatic vitual environment activation&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-f&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/venv_generic/bin/activate&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/venv_generic/bin/activate
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="good-ignoring-keeps-flit-happy"&gt;
&lt;h2&gt;Good ignoring keeps flit happy&lt;/h2&gt;
&lt;p&gt;Flit works nicely with git, but it is quite strict, so we must ignore
all irrelevant files properly or flit will reject builds.&lt;/p&gt;
&lt;p&gt;Below is a good start for a project &amp;quot;.gitignore&amp;quot; file:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
*~
\#*\#
dist/*
pdf_docs/*
html_docs/*
&lt;/pre&gt;
&lt;/div&gt;
</content><category term="python"/><category term="python"/><category term="package"/><category term="distribution"/><category term="logiciel"/><category term="déploiement"/><category term="environnement virtuel"/><category term="comment faire"/></entry><entry><title>Set Up A Wrapper For Venv Environments</title><link href="https://docs.pelican.bernatchez.net/lang-version.fr/vwrapper-fr.html" rel="alternate"/><published>2025-05-24T18:23:52+00:00</published><updated>2025-05-24T18:23:52+00:00</updated><author><name>Pierre Bernatchez</name></author><id>tag:docs.pelican.bernatchez.net,2025-05-24:/lang-version.fr/vwrapper-fr.html</id><summary type="html">&lt;p class="first last"&gt;virtual environment wrapper setup&lt;/p&gt;
</summary><content type="html">&lt;p&gt;To maintain more than one python project at a time we leverage the the
builtin python venv tool for creating and using virtual environments.&lt;/p&gt;
&lt;p&gt;The venvwrapper package helps to keep the maintenance of multiple virtual
environments easier.  In short venv is enough, but venvwrapper makes it
easier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Install the venvwrapper package into your default system Python 3.
That is, with no virtual environment active.
This installs &lt;em&gt;venvwrapper.sh&lt;/em&gt; so that it is available in PATH&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;pip3&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;--break-system-packages&lt;span class="w"&gt; &lt;/span&gt;venvwrapper
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Check that it is indeed available&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;which&lt;span class="w"&gt; &lt;/span&gt;venvwrapper.sh
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Set up automatic activation of venvwrapper&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Add the code snippet below to one or both of these two files.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.bashrc
&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.profile
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Code snippet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;VENV_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/.venv
&lt;span class="nv"&gt;venv_wrapper&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;which&lt;span class="w"&gt; &lt;/span&gt;venvwrapper.sh&lt;span class="k"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;venv_wrapper&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;venv_wrapper&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Now Once you open a terminal window you have access to these commands&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;mkvenv&lt;span class="w"&gt; &lt;/span&gt;devpi&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# create and activate a new virtual environment&lt;/span&gt;
venv&lt;span class="w"&gt;   &lt;/span&gt;devpi&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# activate an existing virtual environment&lt;/span&gt;
rmvenv&lt;span class="w"&gt; &lt;/span&gt;devpi&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# remove one or more virtual environments&lt;/span&gt;
lsvenv&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="c1"&gt;# list existing virtual environments&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
</content><category term="python"/><category term="ubuntu"/><category term="python"/><category term="package"/><category term="distribution"/><category term="logiciel"/><category term="déploiement"/><category term="environnement virtuel"/><category term="comment faire"/></entry></feed>