Usa el módulo Python en la aplicación Swift OS X

¿Cómo puedo integrar un módulo Python en una aplicación OS X para poder llamar a Python desde Swift? Parece que la mayoría de la información está desactualizada y quiero asegurarme de que estoy en el camino correcto.

La respuesta depende de qué tan compleja va a ser tu Python y de lo que necesitas a cambio. Ejemplo súper básico de solo usar Python a través de la interfaz C en Swift (asegúrese de agregar Python.framework):

import Python Py_Initialize() let a = PyInt_FromLong(1) let b = PyInt_FromLong(2) let c = PyNumber_Add(a, b) let result = PyInt_AsLong(c) print("Result is \(result)") // will print 'Result is 3' 

Para algo más complicado, se vuelve más complicado:

 import Python Py_Initialize() // call urllib.urlopen('http://icanhazip.com').read() let module = PyImport_Import(PyString_FromString("urllib")) let urlOpenFunc = PyObject_GetAttrString(module, "urlopen") if urlOpenFunc != nil && PyCallable_Check(urlOpenFunc) == 1 { let args = PyTuple_New(1) PyTuple_SetItem(args, 0, PyString_FromString("http://icanhazip.com")) let openCall = PyObject_CallObject(urlOpenFunc, args) let readCall = PyObject_CallObject(PyObject_GetAttrString(openCall, "read"), nil) if readCall != nil { if let result = String.fromCString(PyString_AsString(readCall)) { print("My IP is \(result)") } else { print("Failed") } } } 

Si quieres hacer un trabajo serio en Python, asegúrate de que la interfaz a la que llama Swift es muy simple o usa PyObjC.