程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

嵌入式Python概述(一)

編輯:Python

嵌入式 Python 允許將 Python 與 IRIS 數據平台的本地編程語言 ObjectScript 一起使用。當使用嵌入式 PythonIRIS 類中編寫方法時,Python 源代碼與編譯後的 ObjectScript 代碼一起編譯為在服務器上運行的目標代碼。與使用網關或 PythonNative SDK 相比,這允許更緊密的集成。還可以導入 Python 包,無論它們是自定義的還是公開的,並在ObjectScript 代碼中使用它們。 Python 對象是 ObjectScript 中的一等公民,反之亦然。

  • 使用來自 ObjectScriptPython 庫 - 此方案假設 ObjectScript 開發人員,並且希望利用 Python 開發人員社區可用的眾多 Python 庫的強大功能。
  • Python 調用 IRIS API — 此方案假定您是一名 Python 開發人員,對 IRIS 不熟悉,並且想知道如何訪問 API
  • 一起使用 ObjectScriptPython — 這個場景假設在一個由 ObjectScriptPython 開發人員組成的混合團隊中,並且想知道如何一起使用這兩種語言。

將需要 2021.2 或更高版本的正在運行的 IRIS 實例,以及取決於操作系統的一些先決條件。還需要知道如何訪問終端,即 IRIS 命令行工具。

本文檔中的一些示例使用來自 GitHubSamples-Data 存儲庫的類:https://github.com/intersystems/Samples-Data。 建議創建一個名為 SAMPLES 的專用命名空間並將樣本加載到該命名空間中。如果想查看或修改示例代碼,則需要設置集成開發環境 (IDE)。推薦使用 Visual Studio Code

本篇並不試圖提供嵌入式 Python 或使用 IRIS 進行編程的全面概述。

使用 ObjectScript 中的 Python 庫

使用 Embedded PythonObjectScript 開發人員可以輕松地使用來自 IRIS 的眾多可用 Python 庫(通常稱為“包”)中的任何一種,從而無需開發自定義庫來復制現有功能。 IRIS<installdir>/mgr/python 目錄中查找已安裝的 Python

ObjectScript 准備 Python 包以供使用是一個兩步過程:

  1. 從命令行,從 Python 包索引(或其他索引)安裝所需的包。
  2. ObjectScript 中,導入已安裝的包以加載包並將其作為對象返回。然後,可以像使用實例化的 ObjectScript 類一樣使用該對象。

安裝 Python 包

在將 Python 包與 Embedded Python 一起使用之前,請從命令行安裝。使用的命令會有所不同,具體取決於使用的是 Windows 還是基於 UNIX 的系統。 建議將軟件包安裝到目錄 <installdir>/mgr/python

Windows 上,使用 <installdir>/bin 目錄中的 irispip 命令:irispip install --target <installdir>\mgr\python <package>.

例如,可以在 Windows 機器上安裝 numpy 包,如下所示:

C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python numpy

在基於 UNIX 的系統上,使用 pip3 命令:pip3 install --target <installdir>/mgr/python <package>

例如,可以在 Linux 機器上安裝 numpy 包,如下所示:

$ pip3 install --target /InterSystems/IRIS/mgr/python numpy

注意:如果基於 UNIX 的系統沒有安裝 pip3,請使用系統的包管理器安裝包 python3-pip

導入 Python 包

%SYS.Python 類包含從 ObjectScript 使用 Python 所需的功能。可以在任何 ObjectScript 上下文中使用 %SYS.Python,例如類、終端會話或 SQL

要從 ObjectScript 導入 Python 包或模塊,請使用 %SYS.Python.Import() 方法。

例如,假設在 USER 命名空間中,以下命令會在終端中導入數學模塊:

USER>set pymath = ##class(%SYS.Python).Import("math")

數學模塊與標准 Python 版本打包在一起,因此無需在導入之前安裝它。通過在 pymath 對象上調用 zwrite,可以看到它是內置數學模塊的一個實例:

USER>zwrite pymath
[email protected]%SYS.Python ; <module 'math' (built-in)> ; <OREF>

注意:包是 Python 模塊的集合,但是當導入包時,創建的對象始終是模塊類型。

現在,可以像訪問任何 ObjectScript 對象一樣訪問數學模塊屬性和方法:

USER>write pymath.pi
3.141592653589793116
USER>write pymath.factorial(10)
3628800

示例

此示例使用 geopy 包來訪問 OpenStreetMapNominatim 地理編碼工具。地理編碼是獲取基於文本的位置描述(例如地址或地名)並返回地理坐標(例如緯度和經度)以精確定位地球表面位置的過程。

首先,從命令行安裝 geopy,如下 Windows 示例所示:

C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python geopy
Collecting geopy
Using cached geopy-2.2.0-py3-none-any.whl (118 kB)
Collecting geographiclib<2,>=1.49
Using cached geographiclib-1.52-py3-none-any.whl (38 kB)
Installing collected packages: geographiclib, geopy
Successfully installed geographiclib-1.52 geopy-2.2.0

在基於 UNIX 的系統上,使用:

$ pip3 install --target /InterSystems/IRIS/mgr/python geopy

然後在終端中運行以下命令來導入和使用模塊:

USER>set geopy = ##class(%SYS.Python).Import("geopy")
USER>set args = { "user_agent": "Embedded Python" }
USER>set geolocator = geopy.Nominatim(args...)
USER>set flatiron = geolocator.geocode("175 5th Avenue NYC")
USER>write flatiron.address
Flatiron Building, 175, 5th Avenue, Flatiron District, Manhattan, New York County, New York, 10010, United States
USER>write flatiron.latitude _ "," _ flatiron.longitude
40.74105919999999514,-73.98964162240997666
USER>set cityhall = geolocator.reverse("42.3604099,-71.060181")
USER>write cityhall.address
Government Center, Cambridge Street, Downtown Crossing, West End, Boston, Suffolk County, Massachusetts, 02203, United States

此示例將 geopy 模塊導入 ObjectScript。然後它使用 Nominatim 模塊創建一個地理定位器對象。該示例使用地理定位器的 geocode() 方法在給定字符串的情況下查找地球上的位置。然後它調用 reverse() 方法來查找給定緯度和經度的地址。

需要注意的一點是 Nominatim() 采用命名關鍵字參數,ObjectScript 不直接支持這種結構。解決方案是創建一個包含參數列表的 JSON 對象(在這種情況下將 user_agent 關鍵字設置為值“嵌入式 Python”),然後使用 args... 語法將其傳遞給方法。

與前面示例中導入的數學模塊相比,對 geopy 對象調用 zwrite 表明它是安裝在 C:\InterSystems\iris\mgr\python 中的 geopy 包的一個實例:

USER>zwrite geopy
[email protected]%SYS.Python ; <module 'geopy' from 'c:\\intersystems\\iris\\mgr\\python\\geopy\\__init__.py'> ; <OREF>

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved