<!-- 14 -->
<p>
  Los <a class="link" data-bs-toggle="modal" data-bs-target="#venv">ambientes virtuales</a> se ubican dentro de una
  carpeta principal que en este caso mi
  carpeta contenedora del proyecto será <b>PROJECT_VENV</b> la cual contendrá toda la información del proyecto, desde
  dependencias y código fuente de la aplicación,
  para este ejemplo crearemos una carpeta llamada init_venv con la ayuda de VENV:
</p>

<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item">
    <a class="nav-link active" id="linux-tab" data-toggle="tab" href="#linux" role="tab" aria-controls="linux"
      aria-selected="true"><i class="fa-brands fa-linux"></i> Linux - Ubuntu</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="windows-tab" data-toggle="tab" href="#windows" role="tab" aria-controls="windows"
      aria-selected="false"><i class="bi bi-windows"></i> Windows</a>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade active show" id="linux" role="tabpanel" aria-labelledby="linux-tab">
    <!-- {# i linux #} -->
    
{% set i %}
python3 -m venv init_venv
{% endset %}
{% with codigo=i.strip() %}{% include 'components/copy-code.html' %}{% endwith %}
    
    <!-- {# f linux #} -->
  </div>
  <div class="tab-pane fade" id="windows" role="tabpanel" aria-labelledby="windows-tab">
    <!-- {# i windows #} -->
    {% set ii %}
    python -m venv init_venv
    {% endset %}
    {% with codigo=ii.strip() %}{% include 'components/copy-code.html' %}{% endwith %}
    <!-- {# f windows #} -->
  </div>
</div>
<p>
  Una vez creado el ambiente virtual debemos activarlo para poder instalar las dependencias necesarias:
</p>
<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item">
    <a class="nav-link active" id="linux2-tab" data-toggle="tab" href="#linux2" role="tab" aria-controls="linux2"
      aria-selected="true"><i class="fa-brands fa-linux"></i> Linux - Ubuntu</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" id="windows2-tab" data-toggle="tab" href="#windows2" role="tab" aria-controls="windows2"
      aria-selected="false"><i class="bi bi-windows2"></i> Windows</a>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade active show" id="linux2" role="tabpanel" aria-labelledby="linux2-tab">
    <!-- {# i linux2 #} -->

    {% set iii %}
    source  init_venv/bin/activate
    {% endset %}
    {% with codigo=iii.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

    <p>
      Cuando actives el ambiente verás en consola una salida muy similar a esta: <br>
    <div class="img zoomable">
      <img src="/static/source_imgs/python/py_2/linux_venv_active.png" alt="">
    </div>
    </p>
    <!-- {# f linux2 #} -->
  </div>
  <div class="tab-pane fade" id="windows2" role="tabpanel" aria-labelledby="windows2-tab">
    <!-- {# i windows2 #} -->

    {% set iv %}
    .\init_venv\Scripts\activate
    {% endset %}
    {% with codigo=iv.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

    <p>
      Cuando actives el ambiente verás en consola una salida muy similar a esta: <br>
    <div class="img zoomable">
      <img src="/static/source_imgs/python/py_2/win_venv_active.png" alt="">
    </div>
    </p>
    <!-- {# f windows2 #} -->
  </div>
</div>
<p>
  En este punto nuestro ambiente virtual está en blanco, no tenemos nada instalado, si queremos confirmarlo podemos
  ejecutar el comando:
</p>

{% set v %}
pip freeze
{% endset %}
{% with codigo=v.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

<p>
  La salida del comando anterior no retornará nada por lo tanto sabemos que no hay nada instalado, para instalar por
  ejemplo <b>pandas</b> en ambos casos el comando base para instalar en windows y linux es exactamente el mismo, pip
  install:
</p>

{% set vi %}
pip install pandas
{% endset %}
{% with codigo=vi.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

<p>Cuando instalemos pandas veremos que se instalarán además de pandas tambien se agragan las dependencias básicas para
  que funcione pandas y la salida del comando debe ser algo muy similar a esta:</p>
<div class="img zoomable">
  <img src="/static/source_imgs/python/py_2/pip_install_pandas.png" alt="">
</div>
<p>
  si vuelves a ejecutar el comando <b>pip freeze</b> podrás ver ahora si todas las dependencias que se han instalado:
</p>
<div class="img zoomable">
  <img src="/static/source_imgs/python/py_2/pip_freeze.png" alt="">
</div>
<p>
  Ahora si, en este supuesto que solo necesitaras pandas ya podrás empezar a trabajar en tu proyecto sin problemas,
  dentro de tu carpeta y con el ambiente activo
  deberás de abrir tu editor de código en mi caso VS Code y el comando es:
</p>

{% set vii %}
code .
{% endset %}
{% with codigo=vii.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

<div class="img zoomable">
  <img src="/static/source_imgs/python/py_2/code.png" alt="">
</div>
<p>
  En tu editor de código ya podrás añadir archivos de python donde uses pandas y al momento de ejecutar el código por
  primera vez, en este caso VS Code detectara que hay un ambiente activo y te pedira que selecciones el ambiente, da
  click en la opción <b>"Python Environments..."</b>
</p>
<div class="img zoomable">
  <img src="/static/source_imgs/python/py_2/venv1.png" alt="">
</div>
<p>
  Despues selecciona el ambiente que este caso es <b>"init_venv (Python 3.12.4)"</b>.
</p>
<div class="img zoomable">
  <img src="/static/source_imgs/python/py_2/venv2.png" alt="">
</div>
<p>
  Para desactivar el ambiente virtual en Windows o Linux solo necesitas ejecutar en la terminal el comando
  <b>deactivate</b>.
</p>

{% set viii %}
deactivate
{% endset %}
{% with codigo=viii.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

<p>
  Si llegaras a necesitar más dependencias, primero debes regresar a la consola e instalarlas ejecutar el comando base
  <b>pip install nombre_dependencia</b> y despues
  importarlas en tus archivos de python. <br><br>
  Te recomiendo que siempre antes de desactivar el ambiente virtual exportes una lista de las dependencias ya que si
  compartes el proyecto la carpeta donde esta
  ubicado
  el ambiente virtual no se comparte ya que vuelve pesado el proyecto, la buena práctica es compartir solo la lista
  con todos las carpetas necesarias sin el dictorio
  del ambiente virtual (init_venv), para exportar la lista de dependencias debes ejecutar el comando:
</p>

{% set ix %}
pip freeze > requirements.txt
{% endset %}
{% with codigo=ix.strip() %}{% include 'components/copy-code.html' %}{% endwith %}

<p>
  Del comando anterior lo que hace es que <b>pip freeze</b> lista las dependencias instaladas y
  <b>requirements.txt</b> indica que almacenará la información que salga de pip freeze en un archivo llamado
  requirements.txt, para este ejemplo práctico y sencillo si compartes tu proyecto solo compartirías la carpeta
  contenedora del proyecto, el archivo donde importas pandas y el archivo requirements.txt
</p>


{% set x %}
PROJECT_VENV 
	|
	-- main.py
	-- requirements.txt
{% endset %}
{% with btn=false, codigo=x.strip() %}
  {% include 'components/copy-code.html' %}
{% endwith %}



<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>