La portabilidad de código nos facilita tremendamente la vida a los desarrolladores. En python casi siempre podremos ejecutar cualquier código en distintas plataformas sin tocar nada, pero como en todo, hay excepciones.
Vamos a ver como adaptar nuestro código para según en que plataforma esté corriendo ejecute unas u otras instrucciones.
Para recuperar la info de la plataforma en la que estamos ejecutando nuestro código utilizamos platform:
import platform
print(platform.platform())
La función devolverá algo así:
Linux-5.0.0-16-generic-x86_64-with-Ubuntu-19.04-disco
O en el caso de un Windows 7..:
Windows-7-6.1.7601-SP1
Ok, conociendo esto, preparar el código para que ejecute un código u otro en función del SO es sencillo. Una vez implementado nos olvidamos de hacer ajustes para esta o aquella instalación.
Ejemplo implementación
Pongamos un ejemplo para que se entienda mejor.
La conexión a un SQLServer requiere de un ODBC específico en cada plataforma, y en la llamada a connect hay que especificar el nombre del mismo como parámetro.
Tienes más información de desarrollo con SQLServer y pyodbc aquí
En Linux utilizamos FreeTDS y en Windows ‘ODBC Driver 17 for SQL Server’
Las respectivas llamadas serian así:
Linux:
dbcnn = pyodbc.connect('DRIVER=FreeTDS;SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
Windows:
dbcnn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
El resultado de implementar ambas según el caso seria el siguiente:
SO=platform.platform()
if(SO.find('Linux')>-1):
# Linux
dbcnn = pyodbc.connect('DRIVER=FreeTDS;SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
else:
# windows:
dbcnn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
Puede que te interese esta entrada
Dudas, comentarios y propuestas ya sabeis.
Espero sea de utilidad,
Saludos!!