<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juan M. Núñez</title>
    <description>The latest articles on DEV Community by Juan M. Núñez (@itcrow).</description>
    <link>https://dev.to/itcrow</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2052718%2Fd75e0f8a-1f7e-488e-97b4-9824f14de5c1.jpg</url>
      <title>DEV Community: Juan M. Núñez</title>
      <link>https://dev.to/itcrow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/itcrow"/>
    <language>en</language>
    <item>
      <title>Archivo .env para las variables de entorno en Python</title>
      <dc:creator>Juan M. Núñez</dc:creator>
      <pubDate>Tue, 10 Sep 2024 12:47:17 +0000</pubDate>
      <link>https://dev.to/itcrow/archivo-env-para-las-variables-de-entorno-en-python-502g</link>
      <guid>https://dev.to/itcrow/archivo-env-para-las-variables-de-entorno-en-python-502g</guid>
      <description>&lt;p&gt;En mi último proyecto personal he necesitado almacenar la clave de una API de forma segura. La forma más recomendable de hacerlo parece ser almacenarlas como variables de entorno. Dado que almacenar multitud de variables de entorno de distintos proyectos en mi máquina resulta un engorro, he dado con una alternativa sencilla con la que manejar esta situación.&lt;/p&gt;

&lt;p&gt;La solución pasa por utilizar el módulo &lt;code&gt;python-dotenv&lt;/code&gt;, que da soporte a nuestro código para utilizar variables almacenadas en un archivo &lt;code&gt;.env&lt;/code&gt; independiente como si se trataran de variables de entorno habituales.&lt;/p&gt;

&lt;p&gt;El proceso es muy sencillo...&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Crear el archivo .env y dar valor a las variables.
&lt;/h2&gt;

&lt;p&gt;En primer lugar creamos un archivo &lt;code&gt;.env&lt;/code&gt; en el que almacenamos las variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Definimos las variables en el archivo .env
&lt;/span&gt;&lt;span class="n"&gt;VARIABLE1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Valor 1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;VARIABLE2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Valor 2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este archivo puede ser creado tanto en la carpeta raíz como en otra ubicación dentro de nuestro proyecto.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Importar el módulo dotenv.
&lt;/h2&gt;

&lt;p&gt;Importamos el módulo &lt;code&gt;dotenv&lt;/code&gt;, y en concreto la función &lt;code&gt;load_dotenv&lt;/code&gt; en nuestro proyecto. También tendremos que importar el módulo &lt;code&gt;os&lt;/code&gt; para importar las variables de entorno una vez cargado el contenido del &lt;code&gt;.env&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dado que no es un módulo nativo de Python, requiere ser instalado por medio de Pip, con el comando &lt;code&gt;pip install python-dotenv&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Recuperar las variables.
&lt;/h2&gt;

&lt;p&gt;La función &lt;code&gt;load_dotenv()&lt;/code&gt; carga las variables al programa como variables de entorno. Con el módulo &lt;code&gt;os&lt;/code&gt; podemos recuperar sus valores y asignárselos a variables dentro del proyecto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Cargamos las variables del archivo como variables de entorno.
&lt;/span&gt;&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 

&lt;span class="c1"&gt;# Se almacena el valor "Valor 1" de la primera variable.
&lt;/span&gt;&lt;span class="n"&gt;VARIABLE1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;VARIABLE1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  

&lt;span class="c1"&gt;# Otra forma de recuperar el valor de la variable.
&lt;/span&gt;&lt;span class="n"&gt;VARIABLE2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;VARIABLE2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Si el archivo &lt;code&gt;.env&lt;/code&gt; no se encuentra en la misma ruta&lt;/strong&gt; en la que se ejecuta el código, debemos definir la ubicación del archivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;load_dontenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ruta/.env&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>security</category>
      <category>api</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
