由于公司開發的產品需要在原生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
太大我就沒上傳了,下載下來直接運行不了。