Ver también CodeCamp pero con cuidado pues no hace falta meter los ficheros __init__.py en cada carpeta!!! O ver tambien Medium
Para crear una librería hay que realizar los siguientes pasos básicos:
1. Crear la carpeta padre del proyecto y crear un entorno virtual en ella
Creamos por ejemplo la carpeta mymodule, y dentro de ella creamos el entorno virtual virtualenv
#Creamos la carpeta padre y nos situamo dentro de ella
mkdir mymodulecd mymodule
#Si no tenemos instalado para crear el entorno virtual lo instalamos
pip install virtualenv
# Creamos el entormo virtual y lo activamos
python -m venv myenv myenv\Scripts\activate.bat
2. Instal·lar en dicho entorno virtual las librerias wheel, setuptools y twine
#Nos situamos dentro de la carpeta padre e instalamos
pip install setuptools wheel twine
3. Creamos la estructura del proyecto: las subcarpetas ximo01, ximo02 y test
#Creamos las subcarpetas ximo01, ximo02 y testmkdir ximo01mkdir ximo02mkdir testcd mymodule
#Si no tenemos instalado para crear el entorno virtual lo instalamos
mymodule/
│
├── mi_paquete/
│ ├── __init__.py
│ ├── subcarpeta1/
│ │ ├── __init__.py
│ │ ├── modulo1.py
│ │ └── modulo2.py
│ ├── subcarpeta2/
│ │ ├── __init__.py
│ │ ├── modulo3.py
│ │ └── modulo4.py
│ └── subcarpeta3/
│ ├── __init__.py
│ ├── modulo5.py
│ └── modulo6.py
4. Crear entorno virtual y activarlo
#Si no tenemos instalado para crear el entorno virtual lo instalamos
pip install virtualenv
# Creamos el entormo virtual y lo activamos
python -m venv myenv
# lo activamos (windows)myenv\Scripts\activate.bat
# lo activamos (linux)
source myvenv/bin/activate
3. Crear una carpeta dentro de ximolib01parent con el nombre que queramos que tenga la librería por jemplo ximollib01
4. Entrar en la carpeta ximolib01parent y crear un entorno virtual de python y activarlo
python3 -m venv myvenv
source myvenv/bin/activate
Ojo: para que el entorno virtual se guarde en a configuración de vscode ver el siguiente post
5. Instalar en dicho entorno las librerías: wheel, setuptools y twine
pip install wheel setuptools twine
6. En la carpeta padre ximolib01parent crear estos ficheros
- setup.py (vacío)
- README.md (inicilamentre vacío, pero se puede dar información de la librería)
7. Situarse en ximolib01 (ximolib01parent/ximolib01) y crear estos ficheros:
- _init__.py (inicilamente vacío)
- Uno o varios ficheros python (.py) de las funcionalidades a crear
8. Situarse en ximolib01parent/tests y crear estos ficheros:
- _init__.py (inicilamente vacío)
- Uno o varios ficheros python (.py) que comiencen con test_ de las funcionalidades a testear
Veamos la estructura del proyecto
└>ximolib01
9. Ejemplo
Supongamos que solmente tenemos esta estructura simple de proyecto
└>ximolib01
Veamos el fichero formulas.py
import math def area_circle(radius): return math.pi * radius ** 2 def area_square(side): return side ** 2 def area_rectangle(length, width): return length * width
Veamos el contenido del fichero test_formulas.py. Para ello debemos observar que para pasar de la carpeta tests a la carpetaximolib01parent debemos hacer 2 salto2, por tanto en el pathlib incluimos 2 saltos
import unittest from pathlib import Path # ------Imprescindible para poder importar de otras carpetas (de basicutils) import sys saltos=2 # Solo hay un salto de la carpeta tests a la carpeta ximolib01parent from pathlib import Path for i in range(saltos):sys.path.append(str(Path(__file__).parents[i])) from ximolib01 import formulas # ------Fin imprescindible class TestFigures(unittest.TestCase): def test_circle_area(self): self.assertEqual(circle.circle_area(1), 3.1415926,'wrong circle area') def test_rectangle_area(self): self.assert rectangle.rectangle_area(1, 2) == 2 #Execute test if __name__ == '__main__': unittest.main()
Observar en el test que importamos así
saltos=2 # Solo hay un salto de la carpeta tests a la carpeta ximolib01parent
from pathlib import Path
for i in range(saltos):sys.path.append(str(Path(__file__).parents[i]))
from ximolib01 import formulas
EJECUCIÓN DE LOS TESTS
Podemos ejecutarlos de 3 maneras:
- Mediante el triángulo de vs code
- En el terminal de vscode( y comprobando que estamos en el entorno virtual) nos situamos dentro de la carpeta ximolib01 (que es el padre inminente de la carpeta tests) y ejecutamos:
python -m unittest tests/test_formula.py
- En el terminal de vscode( y comprobando que estamos en el entorno virtual) nos situamos dentro de la carpeta ximolib01 (que es el padre inminente de la carpeta tests) y ejecutamos:
python -m unittest discover -s tests
En la tercera opción le pedimos al sistema que busquer TODOS los tests y los ejecute
10. Fichero ximolib01parent/setup.py
from setuptools import setup, find_packagesVERSION = '0.0.1'DESCRIPTION = 'My first python library'LONG_DESCRIPTION = 'This is my first library and I am very proud of it'# Setting upsetup(# the name must match the folder name 'ximolib01'name="ximolib01",version=VERSION,author="Ximo Dante",author_email="<ximodane@gmail.com>",description=DESCRIPTION,long_description=LONG_DESCRIPTION,packages=find_packages(),install_requires=['xmltodict'], # add any additional packages that# needs to be installed along with your package. Eg: 'caer'test_requires=[],keywords=['python', 'wsdl'],classifiers= ["Development Status :: 3 - Alpha","Intended Audience :: Education","Programming Language :: Python :: 3","Operating System :: MacOS :: MacOS X","Operating System :: Microsoft :: Windows","Operating System :: Linux :: Ubuntu",])
Los parámetros son:
install_requires indica la lista de librerías que se requieren previamente
test_requires indica la lista de librerías que se requieren previamente solo para realizar los tests
11.Construir (build) la librería
python setup.py bdist_wheel
12. Instalar la librería localmente
pip install /path/to/wheelfile.whl
13. Instalarla en https://pypi.org
13.1 Obtener una clave API de https://pypi.org/
Todo parece sencillo hasta que aparece un código QR que hay que leer con el authentictor de google del móvil y ya da un token enorme que hay que guardar
12. Ejecutar el builfd y la instalación
Ojo: utilizar setup está deprecado!!!!
python setup.py sdist bdist_wheel # Ya hecho antes
twine upload dist/*
Y nos pide el token anterior
Y además nos da una url donde ver la librería
https://pypi.org/project/ximolib01/0.0.1/
13. Instalar la librería
pip install ximolib01
No hay comentarios :
Publicar un comentario