由于公司开发的产品需要在原生app中调用Python去抓取数据,于是在网上找了很久资料,发现还是比较少的。发现比较有用的如下:
使用Python开发iOS程序
Python官网
第一篇文章让我找了思路,具体原理就是在App中安装Python解释器,还好有大牛在下面是编译解释的脚本地址。
https://github.com/pybee/Python-iOS-support
也可以去下载编译好的版本,我是懒人一个就去下载编译好的,下面为下载地址
https://github.com/pybee/Python-iOS-support/releases
下载下来解压为
OpenSSL.framework
和Python.framework
将其拖入Xcode
工程中,另外将PythonEnvironment.bundle
资源包也拖入工程中一、如何在
Xcode
中执行Python
方法1、首先设置Python的Home路径
Py_SetPythonHome(pythonHome);
注意
pythonHome
的路径为PythonEnvironment.bundle
中的Resources
路径
2、初始化解释器并执行简单的python语句
Py_Initialize();
PyRun_SimpleString("print('hello world')");
3、释放解释器
Py_Finalize();
上面简单的步骤就能调用Python方法了。
二、如何调用.py
中类的实例方法
1、首先将.py
文件剪切到xxxx/PythonEnvironment.bundle/Python.framework/Resources/lib/python3.4/site-packages
注意这个路径需要导入这个PythonEnvironment.bundle
中。
2、设置路径和初始化解释器,导入模块找到类并实例化。
PyObject * pModule =PyImport_ImportModule(fileName);//导入模块
PyObject *pyClass = PyObject_GetAttrString(pModule, [className UTF8String]); //获取类
PyObject *pyInstance = PyInstanceMethod_New(pyClass); //创建实例
3、执行方法
PyObject *result = NULL;
result = PyObject_CallMethod(pyInstance, [methodName UTF8String], "(N,s)",pyClass,[paramterJsonString UTF8String]);
// 解析数据
char * resultCString = NULL;
PyArg_Parse(result, "s", &resultCString); //将python类型的返回值转换为c
上面PyObject_CallMethod
中第一个参数为实例对象,第二参数为方法名,第三个格式化参数,PyArg_Parse
方便是把方法的结果转为c语音字符串。
总结:
其实在iOS中调用Python不是很难,主要是一开始的时候不知道如何设置Home
路径,还是就是需要将.py
文件剪切到相对应得路径中去,要不使用PyImport_ImportModule
方法一直导入不了module。最后放上对其封装和测试的Demo地址。注意OpenSSL.framework
和Python.framework
太大我就没上传了,下载下来直接运行不了。