Contexto: el paquete que se está considerando es una aplicación que fue desarrollada por otro equipo y quiero usar la funcionalidad expuesta como parte de una llamada API en mi proyecto django.
Diseño de directorio:
<repo> ├── org_wide_django_code │ ├── my_django_project │ │ ├── my_django_project │ │ ├── manage.py │ │ ├── requirements.txt │ │ └── my_application ├── frontend │ └── application ├── other_team_work │ ├── README.md │ ├── __init__.py │ ├── implemented_logic
¿Cuál es la mejor manera de usar other_team_work
en mi proyecto django my_django_project
?
Lectura previa:
PYTHONPATH
o sys.path es una opción.whl
o .egg
para instalar other_team_work
(también es necesario agregar un setup.py
allí)No estoy seguro de que haya una mejor manera, ya que esto depende mucho de las herramientas internas de su organización. Sin embargo, lo principal a lo que hay que prestar atención en la OMI son los ciclos de lanzamiento y desarrollo. Idealmente, desea que ambos equipos puedan lanzar nuevas características y funcionalidades sin afectar al otro. (por ejemplo, si other_team
realiza un cambio en su código para un tercer equipo, le gustaría que esto no tuviera un impacto posible en su aplicación. De manera similar, other_team
no debería necesitar saber cómo y cuándo usa su módulo para realizar cambios en su aplicación.
Una forma de hacer esto sería empaquetar e instalar other_team_work
(usando setup.py
) y luego enviarlo a un registro de paquetes (por ejemplo , el registro de paquetes de gitlab o los paquetes de github). De esta manera, puede usar other_team_work
como si fuera solo otro paquete de python con pip
(usando el argumento extra-package-url ) y usando versiones específicas en un requirements.txt
.
La forma más sencilla (pero puede ser peligrosa) es agregar other_team_work
a su proyecto en PYTHONPATH. Puede agregar esto al archivo django settings.py
, después de la definición BASE_DIR
. Ejemplo:
import sys BASE_DIR = Path(__file__).resolve().parent.parent # default Django base dir OTHER_TEAM_WORK_PARENT_DIR = BASE_DIR.parent # in accordance with your directories sys.path.append(str(OTHER_TEAM_WORK_PARENT_DIR))
Este código agrega tu directorio org_wide_django_code
a PYTHONPATH y puedes importar other_team_work
en tu código:
from other_team_work import implemented_logic