Como traducir un libro en papel a otro idioma


Con la llegada de la tecnología , se ha hecho posible realizar «hazañas» que en otras épocas hubieran podido parecer imposible , y en este post vamos a hablar de una de ellas : la traducción automática de calidad de libros o documentos en otros idiomas.

En efecto cuando el matemático Warren Weaver en los años 50 vaticinó que las maquinas serian capaces de traducir automáticamente, seguramente no fue consciente de a donde llegaría su pronóstico, al igual probablemente en la misma medida que quizás tampoco ahora seamos capaces de saber hasta donde de lejos llegaremos con la traducción simultanea.

Cuándo pensamos en la traducción automática probablemente pensaremos en la famosa herramienta de Google Translate, pero hemos de decir que día a día, gracias al aprendizaje automático y a la evolución de la Inteligencia Artificial, surgen opciones que superan en muchos aspectos a esta herramienta. Una de esas opciones es el servicio Deepl que genera traducciones mucho mas realistas que otras opciones ,

Para los amigos lectores que le guste leer mucho, de modo que la lectura forme parte de vuestra identidad, entonces, DeepL podría ser la mejor aplicación que ha existido pues la calidad de las traducciones (y nos tenemos que rendir otra vez ante ellos y ante la evidencia), está a la altura de cualquier traducción «homologada», sobre todo cuándo pasamos de cualquier idioma al Ingles.

Bien, si tenemos un escrito en papel impreso en otro idioma y queremos traducirlo a nuestro idioma ,necesitaremos algunas de las siguientes herramientas:

-Un scanner de buena calidad ( normalmente la mayoría de los scanner modernos lo suelen ser)

-Software de escaneo nativo del propio Scanner( en caso de un scanner HP, lo ideal es usar la multiherramienta HP Smart)

-Acrobat Reader a ser posible en su versión profesional para aplicarle el OCR

-Servicio Ilovepdf

-Servicio de traducción online DeepL.

Bueno , sin más dilaciones empecemos con nuestra empresa.

FASE1: ESCANEO DE DOCUMENTOS

Lo primero que necesitáremos es escanear los documentos a un formato standard como puede ser el formato PDF. Es también necesario que dado que en caso de libros en la costura o en los bordes de las hojas aparezcan sombras , realizar el escaneo seleccionado solo la mínima zona donde haya escrito despreciando el resto para facilitar al oCR cumplir su cometido

En nuestro caso vamos a usar la multifunción HP Deskjet 2540 con el software HP Smart. Obviamente tenemos que tener la maquina correctamente configurada y bien instalada ( por ejemplo para usar el software de HP necesitaremos estar validados para usar el servicio) .

Si usamos el software de HP nos iremos a la Opción Escanear, seleccionaremos «Detectar bordes» y una resolución de 300pp, pondremos la primera hoja del documento que queremos traducir lo mas recta posible sin que pueda quedar zonas de sombra y pulsaremos el botón «Escanear».

Es importante apretar con fuerza sobre la parte del lomo para minimizar las sombras inevitables que parareceran en la union centrar de las dos paginas .

Ahora, una vez hayamos escaneado el primer documento, que aunque hayamos dado la opción de Detección bordes , ajustar al mínimo la frontera entre el texto y la zona en blanco de modo que se minimicen las zonas de sombra tope ya que esto facilitara la labor del OCR y además minimizará el tamaño del archivo resultante .

Una vez delimitada la zona de texto, si usamos el sw de HP , daremos al botón «Aplicar» para tomar solo la parte que nos interesa ( el texto). En este punto que probablemente el traductor lo mezcle con el texto , es conveniente omitir en la zona de escaneo el numero de pagina pues esto suele dar muchos problemas con los servicios de traducción al estar fuera de los párrafos «normales».

Asimismo destacar que una vez hayamos seleccionado el área mínima con texto y previsualizado la zona , le demos a «Agregar«, para seguir añadiendo páginas al mismo documento.

Este proceso lo iremos realizando poco a poco siguiendo el orden de las páginas e intentando mantener la misma orientación (no seria crucial para el traductor o para el OCR , pero es trabajo extra que podemos evitar si lo hacemos correctamente desde el principio .

Importante: Antes de guardar él scanner si lo deseamos podemos escanear la portada y contraportada pues aunque no le apliquemos ningún otro tratamiento podemos añadirlo al final para que queda el pdf resultante con un toque mas profesional.

Es importante destacar que si vamos a usar el servicio DeepL el tamaño máximo admitido para el PDF es de 5MB , así que deberíamos tomar el numero de paginas suficiente para que no supere ese valor el pdf resultante.

Bien una vez hayamos concluido, le daremos a guardar en formato PDF básico , elegiremos un nombre ( por defecto se selecciona un nombre no obstante), pulsaremos «Aceptar» y comprobaremos que el fichero generado no supera el tamaño máximo (5Mb)

Una buena opción puede ser elegir ficheros de 20 a 30 páginas dado que con servicio Ilovepdf podemos unir las paginas mediante la opcion UNIR PDF y usando un tamaño «pequeño» de paginas el sw del scanner no nos dará problemas.

Asimismo , es interesante para minimizar el numero de pasos reducir el tamaño del fichero ( recuerde que DeepL y otros servicios limitan a 5Mb el tamaño del fichero máximo a escanear), objetivo que podemos cumplir con la opción «Comprimir PDF»

Bueno, ahora que tenemos uno o varios ficheros en formato en PDF de diferentes partes escritas , es conveniente antes de usar el servicio de traducción , aplicarle el OCR a los ficheros, por lo que abriremos el Adobe Acrobat Pro, Pulsaremos Herramientas, elegiremos Reconocimiento de texto y pulsaremos «En este archivo» . Es muy importante en es punto seleccionar el idioma en el que esta el escrito para que no haya problemas después posteriormente

Bueno , una vez hayamos pasado el OCR y salvado el fichero , ya solo nos queda traducir el fichero para lo cual usaremos el servicio Deepl , actualmente limitado a 4 ficheros de 5MB al mes por usuario en su versión gratuita.

Ahora pues nos oiremos a deepl.com , pulsaremos la opción «Traducir archivos» y subiremos el fichero pdf resultante de haberle aplicado el OCR y seleccionaremos el idioma del texto original que hemos pasado el OCR y al idioma que queremos nos traduzca .

Según el tamaño del pdf, la traducción puede tardar unos cuanto minutos así que no debemos desesperarnos ( puede oscilar entre tres o cuatro minutos si usamos ficheros comprimidos en pdf que contengan además alguna imagen).

Por cierto si usamos la versión gratuita , el fichero que nos devuelva deepL tendrá una pequeña marca de agua al principio del pdf y también vendrá protegido.

Una vez traducido el fichero , ya solo nos queda unir los ficheros resultantes ya traducidos usando el servicio IlovePdf con la opción UINIR PDF que ya hemos visto .

Además para darle un toque mas «profesional» es interesante al conjunto añadirle la portada y contraportada que previamente ya habíamos escaneado para general un único fichero que hemos conseguido traducir gracias a este mix de herramientas de las que hemos hablado .

Por cierto si en lugar de un texto impreso cuenta con un fichero en pdf en otro idioma, el proceso descrito, excepto el del escaneo, es completamente valido ( eso si en lugar de unir PDF tendrá que usar la opción DIVIDIR PDF del servicio ilovepdf para obtener ficheros que pueda usar en el servicio deepl).

Espero amigo lector le haya gustado esta guia, de modo que si tiene alguna sugerencia, truco o idea no dude en comentarla .!Gracias!

Cómo convertir su impresora 3D en un plotter en dos pasos


Un plotter o trazador es un dispositivo que puede dibujar texto e imágenes en papel con un utensilio ( por ejemplo un bolígrafo). 

Si pensamos en en el hardware necesario , podemos pensar que un buen atajo puede ser una vieja ( o no) impresora 3D pues estas ya incluyen todo el hardware y la electrónica que necesitamos: sólo hay que encontrar la manera de adjuntar un utensilio de dibujo y cómo decirle que dibuje.

En realidad como vamos a ver es mucho más fácil de lo que nos podemos imaginar, asi que en esta publicación de blog, aprenderá cómo puede hacer su propio dibujo de impresora.

Ejemplo del primer dibujo de su impresora 3D! 

Convertir una impresora 3D en una impresora 2D

Quizás se pregunte cuál es la utilidad de convertir una impresora 3D en algo que pueda dibujar imágenes 2D en un papel. Después de todo, las impresoras convencionales hacen eso desde hace varias décadas, ¿no es eso un paso atrás?

Pues , un plotter le permitirá dibujar con bolígrafo, lápices de colores, crayones, marcadores e incluso una pluma (básicamente todo lo que pueda dejar marcas en un papel). Pero no solo eso, incluso podemos dibujar en diferentes materiales, como cartón o vidrio. También puede ser creativo con tipos de tinta únicos, como dorada, plateada o que brillan en la oscuridad

Una utilidad innegable para los electrónicos es ayudar en la fabricación de circuitos impresos pues normalmente el diseño de la pcb se realiza calcando el diseño en la parte del cobre y luego hay que volver hay que repintar el diseño con un rotulador edding ( Además incluso puede ayudar en el taladrado con un cnc los orificios para los componentes)

Paso 1 – Colocación de un utensilio de dibujo

Desea montar de manera confiable un bolígrafo en el cabezal de la impresora y asegurarse de que la punta del bolígrafo quede un poco por debajo de la boquilla. Empecé diseñando una pequeña parte de este propósito. Se sujeta al cabezal de la impresora utilizando un pequeño tornillo M3 para fijar el bolígrafo en él:

Puede conseguir el modelo en thingiverse aquí . Debe adaptarse a cualquier impresora Creality Ender-3 o CR-20, y posiblemente a otras impresoras Creality. También es personalizable, por lo que puede modificar las dimensiones (si desea colocar un marcador más grande o necesita un ajuste más ajustado con la impresora).

Para otras impresoras, deberá diseñar su propio mecanismo de montaje (cuando lo haga, comparta un enlace en los comentarios). Si bien también es posible usar tornillos para montar el bolígrafo, personalmente prefiero el mecanismo de recorte, ya que me permite cambiar entre los modos de impresora 3D y trazador muy rápido, y también cambiar los bolígrafos muy rápido.

Paso 2 – Calibración

Una vez que haya montado correctamente su lápiz en su impresora, es hora de calibrarlo. Deberá adjuntar una hoja de papel a la cama de la impresora:

Bolígrafo montado, papel adjunto, ¡listo para su comando!

A continuación, deberá encontrar la altura correcta para imprimir. Se recomiendo usar Repetier Host pen lugar del clasico Cura, pues Repetier Host hara todo mucho más fácil ).

Antes de comenzar, asegúrese de que la plataforma de la impresora esté nivelada y que tanto la boquilla como la plataforma de la impresora estén frías.

Después de ubicar su impresora, vaya a la pestaña «Control manual» dentro de Repetier y mueva el cabezal de impresión hacia arriba hasta que la punta del bolígrafo esté por encima del papel. Luego, mueva su eje X / Y al borde de donde desea que esté su dibujo. Finalmente, mueva el eje Z hacia abajo en incrementos de 0,1 mm, hasta que vea que la punta del bolígrafo toca el papel. A continuación, puede mover un poco la X / Y y comprobar que el bolígrafo realmente deja un rastro en el papel. Cuando termine, observe los valores X / Y / Z que aparecen en la línea superior:

Calibración de la posición de su lápiz en Repetier Host.

En mi caso, los valores fueron 47 para X, 40 para Y y 14,6 para Z. Usaremos estos valores en breve cuando generemos el archivo GCode para imprimir.

Paso 3: elegir qué imprimir y generacion del gcode

Esa es una dificil pues existen infinitass opciones. Sin embargo, deberá obtenerlo en formato vectorial, por lo que si usa Google Imágenes, agregue el texto type:svg al final de su consulta de búsqueda. También puede convertir imágenes JPEG y PNG a SVG , pero sugeriría comenzar con algo que ya viene como un vector para simplificar las cosas.

Cuando se comenza un proyecto asi seguro que se piensa en el tiempo para conseguir el hardware correcto, pero se sorprenderalo rápido que se hace funcionar la parte del hardware. Sin embargo, el software es otra historia completamente diferente; como siempre, el software es donde reside la verdadera complejidad .

 Además de Repetier Host mencionado anteriormente, también necesita obtener Inkscape (que, por cierto, ¡también es útil si desea crear arte de PCB !).

Dentro de Inkscape, cree un nuevo archivo y vaya al menú Archivo → Propiedades del documento (Acceso directo: Ctrl + Shift + D). Luego, establezca el tamaño del documento un poco más pequeño que el tamaño de la cama de impresión y asegúrese también de usarlo mm para las unidades.

Una vez que haya establecido el tamaño, puede importar cualquier archivo SVG que desee o simplemente dibujar un texto con la herramienta Texto:

Cuando termine, con el texto aún seleccionado, haga clic en el menú Ruta → Objeto a ruta (Mayús + Ctrl + C). Esto convertirá el texto en una serie de puntos conectados por líneas, lo cual es necesario para alimentar la impresora. Puede agregar más elementos como espirales y formas de estrella, repitiendo la operación «Objeto a ruta» para cada uno:

Al imprimir, los objetos no se rellenarán, por lo que es posible que desee eliminar su color de relleno y establecer su color de trazo en negro (o el color de su lápiz), para obtener una representación más precisa del resultado final. Seleccione todos los objetos (Ctrl + A) y luego elimine el relleno y aplique color negro para el trazo (Ctrl + Shift + F):

Establecer el color de la pintura de trazo en negro

Cuando esté satisfecho con el resultado, es hora de generar el GCode para la impresora. Usaremos una extensión llamada «Gcodetools», que viene incluida con Inkscape (si no, tiene una versión anterior y necesita actualizar).

Comenzaremos definiendo los puntos de orientación, que le dicen a la impresora cómo mapear las líneas en la pantalla en el papel. Vaya al Menú de extensiones → Gcodetools → Puntos de orientación  y después de asegurarse de que el modo “2 puntos” esté seleccionado, haga clic en Aplicar y luego en Cerrar . Ahora debería ver dos nuevos elementos de texto agregados en la parte inferior de su dibujo:

Estos son los puntos de orientación. Cada punto es una lista de coordenadas X, Y, Z que especifica la ubicación de destino de ese punto en el sistema de coordenadas de la impresora. Debe editarlos para que coincidan con la X / Y que encontró en el paso de calibración y establecer la Z (la tercera coordenada) en 0.

Edite el texto en el punto izquierdo y actualícelo para que contenga las coordenadas X / Y que encontró. En mi caso lo fue (47; 40; 0). Para el punto correcto, agregue 100 al valor X, copie el Y / Z del primero, por ejemplo (147; 40; 0):

A continuación, necesitamos generar una herramienta y configurar su velocidad. Este paso es opcional, pero si no lo hace, su impresora se dibujará realmente muy lento. Vaya al menú Extensiones → Gcodetools → Biblioteca de herramientas  y seleccione «predeterminado» en «Tipos de herramientas»:

Haga clic en Aplicar y luego en Cerrar, y debería ver un rectángulo verde con muchas configuraciones agregadas a su dibujo:

Puede alejar este rectángulo (junto con todos los valores) para que no se sobreponga en su dibujo. Luego, desea editar el texto y cambiar los valores de «Alimentación», «Alimentación de penetración», «Alimentación de paso» para establecer la velocidad de movimiento de la impresora al dibujar. Yo uso 4500 para todos ellos (la unidad es mm / min, por lo que este valor corresponde a 75 mm / seg).

¡Finalmente estamos listos para generar el GCode! Seleccione todos los elementos en su dibujo (Ctrl + A) y vaya a Extensiones → Gcodetools → Ruta a Gcode…

Allí, vaya a la pestaña Opciones y establezca «Escala a lo largo del eje Z» en 1, y «Desplazamiento a lo largo del eje Z» al valor Z que encontró en el paso de calibración, menos uno (encontré 14.6, así que lo configuré aquí a 13.6):

A continuación, vaya a la pestaña Preferencias y establezca el nombre del archivo de salida y la ruta del directorio cuando desee que se guarde. También puede configurar la altura segura Z en un valor más bajo, para acelerar la impresión (yo uso 5):

Finalmente, cambie a la pestaña Ruta a Gcode , configure la Función de profundidad en 1y haga clic en Aplicar. Tardará unos segundos y es posible que muestre una advertencia acerca de que no se han seleccionado rutas, que puede ignorar con seguridad. Debería ver una nueva capa en la parte superior de su dibujo, mostrando los movimientos del cabezal de impresión en el archivo Gcode generado:

En este punto, sugiero abrir el archivo .gcode en un editor de texto y verificar que se vea legítimo, especialmente que los valores Z coincidan con el valor de calibración que encontró:

¡GCode generado! Tenga en cuenta que el valor Z es 14.60000 aquí

También sugiero editar la primera linea G00 y agregar F4500 al final, de lo contrario, su impresora podría hacer que el movimiento inicial del cabezal sea realmente lento:

¡Eso es! Estás listo para imprimir. Cargue su archivo Gcode en el host de Repetier y debería ver su dibujo en la pantalla:

Diga su oración, haga clic en el botón «Iniciar impresión» y … ¡disfrute del espectáculo!

Fuente :https://urish.medium.com/

Cómo configurar Jupyter Notebook con Python 3 en Ubuntu 18.04


Vamos a ver como a configurar Jupyter Notebook en un maquina con Ubuntu 18.04, y aprender a conectarse al Notebook y a utilizarlo. Jupyter Notebooks (o simplemente Notebooks) es un conjunto de documentos producidos por la aplicación Jupyter Notebook, la cual contiene tanto elementos de código icomo de texto enriquecido (párrafos, ecuaciones, cifras y enlaces, entre otros) que ayudan a presentar y compartir la investigación que puede reproducirse.

Al final de esta guía, podrá ejecutar código de Python 3 usando un Jupyter Notebook en ejecución.

Configurar Python

Para iniciar el proceso, instalaremos las dependencias que necesitamos para nuestro entorno de programación de Python desde los repositorios de Ubuntu. Ubuntu 18.04 viene con Python 3.6 previamente instalado. Usaremos el administrador de paquetes de Python pip para instalar componentes adicionales más tarde.

Necesitaremos primero actualizar el índice de paquetes local apt y luego descargaremos e instalaremos los paquetes:

sudo apt update

A continuación, instale pip y los archivos de encabezado de Python, utilizados por algunas dependencias de Jupyter:

sudo apt install python3-pip python3-dev

Ahora podemos proceder a configurar un entorno virtual de Python en el que instalaremos Jupyter.

Crear un entorno virtual de Python para Jupyter

Ahora Python 3, sus archivos de encabezado y pip están listos para comenzar, podemos crear un entorno virtual de Python para administrar nuestros proyectos. Instalaremos Jupyter en este entorno virtual.

Para ello, primero necesitaremos acceso al comando virtualenv, que podemos instalar con pip.

Actualice pip e instale el paquete escribiendo lo siguiente:

sudo -H pip3 install --upgrade pip
sudo -H pip3 install virtualenv

El indicador -H garantiza que la política de seguridad defina la variable de entorno home como el directorio de inicio del usuario de destino.

Con virtualenv ya instalado, podemos comenzar a crear nuestro entorno. Cree un directorio en el que podamos guardar los archivos de nuestro proyecto y posiciónese en él: Daremos a este directorio el nombre my_project_dir, pero deberá usar un nombre que sea significativo para usted y para el trabajo que está desarrolle.

mkdir ~/my_project_dir
cd ~/my_project_dir

En el directorio del proyecto, crearemos un entorno virtual de Python. A los efectos de este tutorial, le daremos el nombre my_project_env, pero debería asignarle uno que se relacione con su proyecto.

virtualenv my_project_env

Con esto, se creará un directorio llamado my_project_env dentro de su directorio my_project_dir. Dentro de este, se instalarán una versión local de Python y una versión local de pip. Podemos usar esto para instalar y configurar un entorno aislado de Python para Jupyter.

Antes de instalar Jupyter, debemos activar el entorno virtual. Puede hacerlo escribiendo lo siguiente:

source my_project_env/bin/activate

Su línea de comandos cambiará para indicar que ahora realizará operaciones en un entorno virtual de Python. Tendrá un aspecto similar al siguiente: (my_project_env)[email protected]:~/my_project_dir$.

Con esto, estará listo para instalar Jupyter en este entorno virtual.

Instalar Jupyter

Una vez activado su entorno virtual, instale Jupyter con la instancia local de pip.

Nota: Cuando se active el entorno virtual (cuando (my_project_env) se encuentre al inicio de su línea de comandos), use pip en lugar de pip3, incluso si emplea Python 3. La copia del entorno virtual de la herramienta siempre se llama pip, independientemente de la versión de Python.

pip install jupyter

En este punto, habrá instalado con éxito todo el software necesario para ejecutar Jupyter. Ahora podremos iniciar el servidor de Notebook.

Ejecutar Jupyter Notebook

Ya dispone de todo lo que necesita para ejecutar Jupyter Notebook. Para ejecutarlo, introduzca el siguiente comando:

jupyter notebook

Se mostrará un registro de las actividades de Jupyter Notebook en el terminal. Cuando se ejecuta Jupyter Notebook, este funciona en un número de puerto específico. Normalmente, el primer notebook que ejecute usará el puerto 8888. Para verificar el número de puerto específico en el que se ejecuta Jupyter Notebook, consulte el resultado del comando utilizado para iniciarlo:

Output[I 21:23:21.198 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret
[I 21:23:21.361 NotebookApp] Serving notebooks from local directory: /home/sammy/my_project_dir
[I 21:23:21.361 NotebookApp] The Jupyter Notebook is running at:
[I 21:23:21.361 NotebookApp] http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72
[I 21:23:21.361 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 21:23:21.361 NotebookApp] No web browser found: could not locate runnable browser.
[C 21:23:21.361 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72

Si ejecuta Jupyter Notebook en una computadora local (no en un servidor), puede dirigirse a la URL que se muestra para conectarse a Jupyter Notebook. Si ejecuta Jupyter Notebook en un servidor, deberá establecer conexión con este usando túneles SSH.

Usar Jupyter Notebook

Si Jupyter Notebook aún no está en ejecución, inícielo con el comando jupyter notebook.

Con esto, debería establecer conexión con este usando un navegador web. Jupyter Notebook es una herramienta muy poderosa que dispone de muchas características. En esta sección se mostrarán algunas de las características básicas para que comience a usar el Notebook. Jupyter Notebook mostrará todos los archivos y las carpetas en el directorio desde el que se ejecuta. Por ello, cuando trabaje en un proyecto asegúrese de iniciarlo desde el directorio del proyecto.

Para crear un nuevo archivo de Notebook, seleccione New > Python 3 en el menú desplegable que se encuentra en la parte superior derecha:

Crear un nuevo notebook de Python 3

Con esto se abrirá un Notebook. Ahora podemos ejecutar el código de Python en la celda o cambiar la celda a lenguaje de marcado. Por ejemplo, cambie la primera celda para aceptar el lenguaje de marcado haciendo clic en Cell > Cell Type > Markdown en la barra de navegación de la parte superior. Con esto, podremos escribir notas usando el lenguaje de marcado e incluso incluir ecuaciones escritas en LaTeX disponiéndolas entre los símbolos de $$. Por ejemplo, escriba lo siguiente en la celda después del cambio a lenguaje de marcado:

# First Equation

Let us now implement the following equation:
$$ y = x^2$$

where $x = 2$

Para convertir el lenguaje de marcado en texto enriquecido, presione CTRL + ENTER. Deberían aparecer los siguientes resultados:

Resultados de lenguaje de marcado

Puede utilizar las celdas de lenguaje de marcado para crear notas y documentar su código. Implementaremos esa ecuación e imprimiremos el resultado. Haga clic en la celda superior y presione ALT+ENTER para añadir una celda debajo de esta. Ingrese el código siguiente en la nueva celda.

x = 2
y = x**2
print(y)

Para ejecutar el código, presione CTRL+ENTER. Obtendrá los siguientes resultados:

Resultado de la primera ecuación

Ahora podrá importar módulos y usar el Notebook como lo haría con cualquier otro entorno de desarrollo de Python.

A partir de aquí, puede iniciar un proyecto de análisis y visualización de datos o por ejemplo ,si está interesado en abordar el tema en mayor profundidad, puede investigar sobre Visualización y pronóstico de series de tiempo.

Como ejemplo , en las lineas siguientes mostramos una ejecución de los comandos anteriormente vistos:

[email protected]:~$ sudo apt install python3-pip python3-dev
[sudo] contraseña para carlos: 
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
python3-dev ya está en su versión más reciente (3.8.2-0ubuntu2).
python3-pip ya está en su versión más reciente (20.0.2-5ubuntu1.5).
Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios.
  distro-info libfprint-2-tod1 libllvm9
Utilice «sudo apt autoremove» para eliminarlos.
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 40 no actualizados.
[email protected]:~$ sudo -H pip3 install --upgrade pip
Requirement already satisfied: pip in /usr/local/lib/python3.8/dist-packages (21.1.3)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[email protected]:~$ sudo -H pip3 install virtualenv
Requirement already satisfied: virtualenv in /usr/local/lib/python3.8/dist-packages (20.4.7)
Requirement already satisfied: distlib<1,>=0.3.1 in /usr/local/lib/python3.8/dist-packages (from virtualenv) (0.3.2)
Requirement already satisfied: six<2,>=1.9.0 in /usr/lib/python3/dist-packages (from virtualenv) (1.14.0)
Requirement already satisfied: appdirs<2,>=1.4.3 in /usr/local/lib/python3.8/dist-packages (from virtualenv) (1.4.4)
Requirement already satisfied: filelock<4,>=3.0.0 in /usr/local/lib/python3.8/dist-packages (from virtualenv) (3.0.12)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
[email protected]:~$ ls
Descargas   Escritorio  Música      Público  Vídeos
Documentos  Imágenes    Plantillas  snap
[email protected]:~$ mkdir ~/mi_proyecto_dir
[email protected]:~$ mkdir ~/mi_proyecto_dir
mkdir: no se puede crear el directorio «/home/carlos/mi_proyecto_dir»: El archivo ya existe
[email protected]:~$ cd ~/mi_proyecto_dir
[email protected]:~/mi_proyecto_dir$ virtualenv mi_proyecto_env
created virtual environment CPython3.8.5.final.0-64 in 458ms
  creator CPython3Posix(dest=/home/carlos/mi_proyecto_dir/mi_proyecto_env, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/carlos/.local/share/virtualenv)
    added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
[email protected]:~/mi_proyecto_dir$ source mi_proyecto_env/bin/activate
(mi_proyecto_env) [email protected]:~/mi_proyecto_dir$ pip install jupyter
Collecting jupyter
  Downloading jupyter-1.0.0-py2.py3-none-any.whl (2.7 kB)
Collecting ipykernel
  Downloading ipykernel-5.5.5-py3-none-any.whl (120 kB)
     |████████████████████████████████| 120 kB 2.7 MB/s 
Collecting jupyter-console
  Downloading jupyter_console-6.4.0-py3-none-any.whl (22 kB)
Collecting notebook
  Downloading notebook-6.4.0-py3-none-any.whl (9.5 MB)
     |████████████████████████████████| 9.5 MB 9.2 MB/s 
Collecting qtconsole
  Downloading qtconsole-5.1.0-py3-none-any.whl (119 kB)
     |████████████████████████████████| 119 kB 1.6 MB/s 
Collecting ipywidgets
  Downloading ipywidgets-7.6.3-py2.py3-none-any.whl (121 kB)
     |████████████████████████████████| 121 kB 1.6 MB/s 
Collecting nbconvert
  Downloading nbconvert-6.1.0-py3-none-any.whl (551 kB)
     |████████████████████████████████| 551 kB 2.3 MB/s 
Collecting ipython>=5.0.0
  Downloading ipython-7.25.0-py3-none-any.whl (786 kB)
     |████████████████████████████████| 786 kB 3.2 MB/s 
Collecting tornado>=4.2
  Downloading tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl (427 kB)
     |████████████████████████████████| 427 kB 3.2 MB/s 
Collecting traitlets>=4.1.0
  Downloading traitlets-5.0.5-py3-none-any.whl (100 kB)
     |████████████████████████████████| 100 kB 2.9 MB/s 
Collecting jupyter-client
  Downloading jupyter_client-6.1.12-py3-none-any.whl (112 kB)
     |████████████████████████████████| 112 kB 3.3 MB/s 
Collecting pygments
  Downloading Pygments-2.9.0-py3-none-any.whl (1.0 MB)
     |████████████████████████████████| 1.0 MB 4.6 MB/s 
Requirement already satisfied: setuptools>=18.5 in ./mi_proyecto_env/lib/python3.8/site-packages (from ipython>=5.0.0->ipykernel->jupyter) (57.0.0)
Collecting matplotlib-inline
  Downloading matplotlib_inline-0.1.2-py3-none-any.whl (8.2 kB)
Collecting pexpect>4.3
  Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB)
     |████████████████████████████████| 59 kB 3.4 MB/s 
Collecting prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0
  Downloading prompt_toolkit-3.0.19-py3-none-any.whl (368 kB)
     |████████████████████████████████| 368 kB 3.5 MB/s 
Collecting jedi>=0.16
  Downloading jedi-0.18.0-py2.py3-none-any.whl (1.4 MB)
     |████████████████████████████████| 1.4 MB 2.7 MB/s 
Collecting backcall
  Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)
Collecting pickleshare
  Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
Collecting decorator
  Downloading decorator-5.0.9-py3-none-any.whl (8.9 kB)
Collecting parso<0.9.0,>=0.8.0
  Downloading parso-0.8.2-py2.py3-none-any.whl (94 kB)
     |████████████████████████████████| 94 kB 1.7 MB/s 
Collecting ptyprocess>=0.5
  Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
Collecting wcwidth
  Downloading wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)
Collecting ipython-genutils
  Downloading ipython_genutils-0.2.0-py2.py3-none-any.whl (26 kB)
Collecting nbformat>=4.2.0
  Downloading nbformat-5.1.3-py3-none-any.whl (178 kB)
     |████████████████████████████████| 178 kB 3.7 MB/s 
Collecting widgetsnbextension~=3.5.0
  Downloading widgetsnbextension-3.5.1-py2.py3-none-any.whl (2.2 MB)
     |████████████████████████████████| 2.2 MB 4.5 MB/s 
Collecting jupyterlab-widgets>=1.0.0
  Downloading jupyterlab_widgets-1.0.0-py3-none-any.whl (243 kB)
     |████████████████████████████████| 243 kB 2.8 MB/s 
Collecting jsonschema!=2.5.0,>=2.4
  Downloading jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)
     |████████████████████████████████| 56 kB 2.4 MB/s 
Collecting jupyter-core
  Downloading jupyter_core-4.7.1-py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 545 kB/s 
Collecting six>=1.11.0
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting attrs>=17.4.0
  Downloading attrs-21.2.0-py2.py3-none-any.whl (53 kB)
     |████████████████████████████████| 53 kB 1.7 MB/s 
Collecting pyrsistent>=0.14.0
  Downloading pyrsistent-0.17.3.tar.gz (106 kB)
     |████████████████████████████████| 106 kB 4.7 MB/s 
Collecting pyzmq>=17
  Downloading pyzmq-22.1.0-cp38-cp38-manylinux2010_x86_64.whl (1.1 MB)
     |████████████████████████████████| 1.1 MB 9.0 MB/s 
Collecting argon2-cffi
  Downloading argon2_cffi-20.1.0-cp35-abi3-manylinux1_x86_64.whl (97 kB)
     |████████████████████████████████| 97 kB 2.4 MB/s 
Collecting terminado>=0.8.3
  Downloading terminado-0.10.1-py3-none-any.whl (14 kB)
Collecting Send2Trash>=1.5.0
  Downloading Send2Trash-1.7.1-py3-none-any.whl (17 kB)
Collecting prometheus-client
  Downloading prometheus_client-0.11.0-py2.py3-none-any.whl (56 kB)
     |████████████████████████████████| 56 kB 2.9 MB/s 
Collecting jinja2
  Downloading Jinja2-3.0.1-py3-none-any.whl (133 kB)
     |████████████████████████████████| 133 kB 5.3 MB/s 
Collecting python-dateutil>=2.1
  Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
     |████████████████████████████████| 227 kB 6.1 MB/s 
Collecting cffi>=1.0.0
  Downloading cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl (411 kB)
     |████████████████████████████████| 411 kB 5.6 MB/s 
Collecting pycparser
  Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB)
     |████████████████████████████████| 112 kB 6.4 MB/s 
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl (30 kB)
Collecting defusedxml
  Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Collecting jupyterlab-pygments
  Downloading jupyterlab_pygments-0.1.2-py2.py3-none-any.whl (4.6 kB)
Collecting pandocfilters>=1.4.1
  Downloading pandocfilters-1.4.3.tar.gz (16 kB)
Collecting entrypoints>=0.2.2
  Downloading entrypoints-0.3-py2.py3-none-any.whl (11 kB)
Collecting testpath
  Downloading testpath-0.5.0-py3-none-any.whl (84 kB)
     |████████████████████████████████| 84 kB 2.3 MB/s 
Collecting nbclient<0.6.0,>=0.5.0
  Downloading nbclient-0.5.3-py3-none-any.whl (82 kB)
     |████████████████████████████████| 82 kB 156 kB/s 
Collecting mistune<2,>=0.8.1
  Downloading mistune-0.8.4-py2.py3-none-any.whl (16 kB)
Collecting bleach
  Downloading bleach-3.3.0-py2.py3-none-any.whl (283 kB)
     |████████████████████████████████| 283 kB 2.0 MB/s 
Collecting async-generator
  Downloading async_generator-1.10-py3-none-any.whl (18 kB)
Collecting nest-asyncio
  Downloading nest_asyncio-1.5.1-py3-none-any.whl (5.0 kB)
Collecting webencodings
  Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
Collecting packaging
  Downloading packaging-20.9-py2.py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 2.3 MB/s 
Collecting pyparsing>=2.0.2
  Downloading pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
     |████████████████████████████████| 67 kB 2.3 MB/s 
Collecting qtpy
  Downloading QtPy-1.9.0-py2.py3-none-any.whl (54 kB)
     |████████████████████████████████| 54 kB 1.6 MB/s 
Building wheels for collected packages: pyrsistent, pandocfilters
  Building wheel for pyrsistent (setup.py) ... done
  Created wheel for pyrsistent: filename=pyrsistent-0.17.3-cp38-cp38-linux_x86_64.whl size=106707 sha256=e6bbf1c3ab821bff25db37c383511188da3a4f86108ffafb72e36a85a06af1a7
  Stored in directory: /home/carlos/.cache/pip/wheels/3d/22/08/7042eb6309c650c7b53615d5df5cc61f1ea9680e7edd3a08d2
  Building wheel for pandocfilters (setup.py) ... done
  Created wheel for pandocfilters: filename=pandocfilters-1.4.3-py3-none-any.whl size=8006 sha256=b9ea03260cb4b2803d7d4ce8b6af9838ccd6c5a1509e73f783636910928a9d84
  Stored in directory: /home/carlos/.cache/pip/wheels/fc/39/52/8d6f3cec1cca4ceb44d658427c35711b19d89dbc4914af657f
Successfully built pyrsistent pandocfilters
Installing collected packages: ipython-genutils, traitlets, six, pyrsistent, attrs, wcwidth, tornado, pyzmq, python-dateutil, pyparsing, ptyprocess, parso, jupyter-core, jsonschema, webencodings, pygments, pycparser, prompt-toolkit, pickleshare, pexpect, packaging, nest-asyncio, nbformat, matplotlib-inline, MarkupSafe, jupyter-client, jedi, decorator, backcall, async-generator, testpath, pandocfilters, nbclient, mistune, jupyterlab-pygments, jinja2, ipython, entrypoints, defusedxml, cffi, bleach, terminado, Send2Trash, prometheus-client, nbconvert, ipykernel, argon2-cffi, notebook, widgetsnbextension, qtpy, jupyterlab-widgets, qtconsole, jupyter-console, ipywidgets, jupyter
Successfully installed MarkupSafe-2.0.1 Send2Trash-1.7.1 argon2-cffi-20.1.0 async-generator-1.10 attrs-21.2.0 backcall-0.2.0 bleach-3.3.0 cffi-1.14.5 decorator-5.0.9 defusedxml-0.7.1 entrypoints-0.3 ipykernel-5.5.5 ipython-7.25.0 ipython-genutils-0.2.0 ipywidgets-7.6.3 jedi-0.18.0 jinja2-3.0.1 jsonschema-3.2.0 jupyter-1.0.0 jupyter-client-6.1.12 jupyter-console-6.4.0 jupyter-core-4.7.1 jupyterlab-pygments-0.1.2 jupyterlab-widgets-1.0.0 matplotlib-inline-0.1.2 mistune-0.8.4 nbclient-0.5.3 nbconvert-6.1.0 nbformat-5.1.3 nest-asyncio-1.5.1 notebook-6.4.0 packaging-20.9 pandocfilters-1.4.3 parso-0.8.2 pexpect-4.8.0 pickleshare-0.7.5 prometheus-client-0.11.0 prompt-toolkit-3.0.19 ptyprocess-0.7.0 pycparser-2.20 pygments-2.9.0 pyparsing-2.4.7 pyrsistent-0.17.3 python-dateutil-2.8.1 pyzmq-22.1.0 qtconsole-5.1.0 qtpy-1.9.0 six-1.16.0 terminado-0.10.1 testpath-0.5.0 tornado-6.1 traitlets-5.0.5 wcwidth-0.2.5 webencodings-0.5.1 widgetsnbextension-3.5.1
WARNING: You are using pip version 21.1.2; however, version 21.1.3 is available.
You should consider upgrading via the '/home/carlos/mi_proyecto_dir/mi_proyecto_env/bin/python -m pip install --upgrade pip' command.
(mi_proyecto_env) [email protected]:~/mi_proyecto_dir$ jupyter notebook
[I 18:20:27.709 NotebookApp] Writing notebook server cookie secret to /home/carlos/.local/share/jupyter/runtime/notebook_cookie_secret
[I 18:20:28.151 NotebookApp] Serving notebooks from local directory: /home/carlos/mi_proyecto_dir
[I 18:20:28.151 NotebookApp] Jupyter Notebook 6.4.0 is running at:
[I 18:20:28.151 NotebookApp] http://localhost:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69
[I 18:20:28.151 NotebookApp]  or http://127.0.0.1:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69
[I 18:20:28.151 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 18:20:28.257 NotebookApp] 
    
    To access the notebook, open this file in a browser:
        file:///home/carlos/.local/share/jupyter/runtime/nbserver-3327-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69
     or http://127.0.0.1:8888/?token=e91cecb366426aa83eee2b176e262267cd70f188147d9d69