<?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.es/" rel="alternate"/><link href="https://docs.pelican.bernatchez.net/lang-version.es/feeds/python.atom.xml" rel="self"/><id>https://docs.pelican.bernatchez.net/lang-version.es/</id><updated>2025-05-24T18:23:52+00:00</updated><entry><title>Configurar un índice de paquetes privados de proyecto</title><link href="https://docs.pelican.bernatchez.net/lang-version.es/personal-pypi-es.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.es/personal-pypi-es.html</id><summary type="html">&lt;p class="first last"&gt;Configuración del índice de paquetes de primates DevPI para nuestros paquetes.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;strong&gt;Descripción general&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Este documento describe la configuración de un índice de paquetes privados como una forma más conveniente de distribuir paquetes de Python.&lt;/p&gt;
&lt;p&gt;La necesidad de usar algo como esto crece a medida que agregamos mantenedores y paquetes para mantener.&lt;/p&gt;
&lt;p&gt;Nuestros paquetes de Python deben ser compatiles con el Pypi estándar de Pypi Index Pypi.&lt;/p&gt;
&lt;p&gt;Utilizamos un índice de paquete privado hasta que estemos listos para hacer que un paquete esté disponible para el público en general,
Luego cambiamos a Pypi.&lt;/p&gt;
&lt;p&gt;Esta herramienta que estamos utilizando mantiene nuestros paquetes compatibles con PYPI para cuando la ponemos a disposición allí.&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;Es un sistema de índice de paquetes conforme.&lt;/p&gt;
&lt;p&gt;We will use it to serve our private  package index.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="section" id="configuring-the-sw-for-devpi"&gt;
&lt;h2&gt;Configuring the SW for devpi&lt;/h2&gt;
&lt;p&gt;Este cómo se deriva del siguiente 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 are working with python3.
Queremos configurar un entorno virtual que se ajuste a nuestros supuestos y luego instalar dentro de eso.
Llamamos al entorno devpi_venv.
Creamos un directorio para nuestra configuración primero.&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;Instalamos los elementos esenciales desnudos.&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; es un visor de formato de texto reestructurado que encuentro útil.(opcional)&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;Usted lo invoca y sigue reenviando su archivo a medida que lo modifica.&lt;/p&gt;
&lt;p&gt;Como esto:&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; es conveniente para generar copias PDF de .rst documuents.&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="configurar-el-servidor-devpi-en-nuestra-computadora-portatil"&gt;
&lt;h2&gt;Configurar el servidor DevPI en nuestra computadora portátil&lt;/h2&gt;
&lt;p&gt;Instale el cliente Devpi y el servidor web
El servidor no web, DevPI -servidor, se instala como consecuencia.&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;Inicializar un índice vacío (AT /VAR /DevPI-Merver de forma predeterminada)
Tenga en cuenta que tenía un problema de permisos con el init.
Así que primero hago esto manualmente:&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;Queremos que use un archivo de configuración para Supervisor Daemon.
Esto generará un montón de archivos de configuración en el actual
Directorio, el que queremos incluir.&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;Esto nos da el archivo gen-config/supervisor-devpi.conf
Copiar a/etc/supervisor/conf para que podamos comenzar
arriba del servidor.Empecé editándolo para decir
inicio = falso para que deba comenzar
arriba manualmente.Luego lo copié al lugar correcto para ello.&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;Crear un usuario, iniciar sesión como él y crear el índice '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;Utilice nuestro índice de desarrollo&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;Ahora podemos hacer uso del índice privado.&lt;/p&gt;
&lt;p&gt;Estamos utilizando Flit para publicar en nuestro índice y confía en el archivo: ~/.pypirc.&lt;/p&gt;
&lt;p&gt;Entonces hacemos una entrada allí para nuestro índice.Le di el nombre '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;De aquí en adelante, usando Flit, podemos referirlo como '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="paquete"/><category term="índice"/><category term="distribución"/><category term="software"/><category term="implementación"/><category term="revisión"/><category term="cómo"/></entry><entry><title>Set up a private package index</title><link href="https://docs.pelican.bernatchez.net/lang-version.es/privatepypi-es.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.es/privatepypi-es.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="paquete"/><category term="índice"/><category term="distribución"/><category term="software"/><category term="implementación"/><category term="revisión"/><category term="cómo"/></entry><entry><title>Configurar un entorno virtual de Python</title><link href="https://docs.pelican.bernatchez.net/lang-version.es/venv-es.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.es/venv-es.html</id><summary type="html">&lt;p class="first last"&gt;Configurar un entorno virtual de Python&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;strong&gt;Asegúrese de que la versión del sistema Ubuntu sea lo suficientemente reciente&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;Impresión  (o arriba)&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;Impresión&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;Crear una base para todos nuestros entornos virtuales&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;# Entonces podemos crear todos nuestros entornos virtuales en ${HOME}/.venv/&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Crear nuestro entorno virtual&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;# Aqui nombramos el entorno virtual 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;O utilizando 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;Una vez creado nuestro entorno, podemos instalar los elementos necesarios para empezar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actívalo&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;O utilizando 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;Instalar lo básico&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;# Instalar&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;# desactivar&lt;/span&gt;
deactivate
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Guardar requisitos previos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una vez completado el entorno virtual, conviene guardar el contexto.
De esta forma, podrá restaurarlo rápidamente desde cero si es necesario.&lt;/p&gt;
&lt;p&gt;Mientras está activado&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;# Es  buena idea mantener dichos archivos bajo control de versiones.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Recuperar&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mientras está activado&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;Activación automatica&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En muchos casos, queremos activar un proyecto al iniciar
sesión. Podemos hacerlo automáticamente añadiendo algo como esto a
.bashrc o .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;# Añadido para activación automatica del entorno virtual&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;O utilizando 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;# Añadido para activación automatica del entorno virtual&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="paquete"/><category term="distribución"/><category term="software"/><category term="implementación"/><category term="entorno virtual"/><category term="cómo"/></entry><entry><title>python virtual environment</title><link href="https://docs.pelican.bernatchez.net/lang-version.es/virtualenv-es.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.es/virtualenv-es.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="paquete"/><category term="distribución"/><category term="software"/><category term="implementación"/><category term="entorno virtual"/><category term="cómo"/></entry><entry><title>Set Up A Wrapper For Venv Environments</title><link href="https://docs.pelican.bernatchez.net/lang-version.es/vwrapper-es.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.es/vwrapper-es.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="paquete"/><category term="distribución"/><category term="software"/><category term="implementación"/><category term="entorno virtual"/><category term="cómo"/></entry></feed>