由于公司開發(fā)的產(chǎn)品需要在原生app中調(diào)用Python去抓取數(shù)據(jù),于是在網(wǎng)上找了很久資料,發(fā)現(xiàn)還是比較少的。發(fā)現(xiàn)比較有用的如下:
使用Python開發(fā)iOS程序
Python官網(wǎng)
第一篇文章讓我找了思路,具體原理就是在App中安裝Python解釋器,還好有大牛在下面是編譯解釋的腳本地址。
https://github.com/pybee/Python-iOS-support
也可以去下載編譯好的版本,我是懶人一個(gè)就去下載編譯好的,下面為下載地址
https://github.com/pybee/Python-iOS-support/releases

下載下來解壓為
OpenSSL.framework和Python.framework將其拖入Xcode工程中,另外將PythonEnvironment.bundle資源包也拖入工程中一、如何在
Xcode中執(zhí)行Python方法1、首先設(shè)置Python的Home路徑
Py_SetPythonHome(pythonHome);

注意
pythonHome的路徑為PythonEnvironment.bundle中的Resources路徑
2、初始化解釋器并執(zhí)行簡單的python語句
Py_Initialize();
PyRun_SimpleString("print('hello world')");
3、釋放解釋器
Py_Finalize();
上面簡單的步驟就能調(diào)用Python方法了。
二、如何調(diào)用.py中類的實(shí)例方法
1、首先將.py文件剪切到xxxx/PythonEnvironment.bundle/Python.framework/Resources/lib/python3.4/site-packages
注意這個(gè)路徑需要導(dǎo)入這個(gè)PythonEnvironment.bundle中。
2、設(shè)置路徑和初始化解釋器,導(dǎo)入模塊找到類并實(shí)例化。
PyObject * pModule =PyImport_ImportModule(fileName);//導(dǎo)入模塊
PyObject *pyClass = PyObject_GetAttrString(pModule, [className UTF8String]); //獲取類
PyObject *pyInstance = PyInstanceMethod_New(pyClass); //創(chuàng)建實(shí)例
3、執(zhí)行方法
PyObject *result = NULL;
result = PyObject_CallMethod(pyInstance, [methodName UTF8String], "(N,s)",pyClass,[paramterJsonString UTF8String]);
// 解析數(shù)據(jù)
char * resultCString = NULL;
PyArg_Parse(result, "s", &resultCString); //將python類型的返回值轉(zhuǎn)換為c
上面PyObject_CallMethod中第一個(gè)參數(shù)為實(shí)例對象,第二參數(shù)為方法名,第三個(gè)格式化參數(shù),PyArg_Parse方便是把方法的結(jié)果轉(zhuǎn)為c語音字符串。
總結(jié):
其實(shí)在iOS中調(diào)用Python不是很難,主要是一開始的時(shí)候不知道如何設(shè)置Home路徑,還是就是需要將.py文件剪切到相對應(yīng)得路徑中去,要不使用PyImport_ImportModule方法一直導(dǎo)入不了module。最后放上對其封裝和測試的Demo地址。注意OpenSSL.framework和Python.framework太大我就沒上傳了,下載下來直接運(yùn)行不了。