chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

phpy:PHP與Python互調(diào)用庫(kù)

OSC開(kāi)源社區(qū) ? 來(lái)源:OSC開(kāi)源社區(qū) ? 2023-12-12 10:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

phpy 是識(shí)沃團(tuán)隊(duì)最新推出的開(kāi)源項(xiàng)目,目標(biāo)是為PHP引入Python生態(tài),來(lái)彌補(bǔ)PHP生態(tài)的空缺和不足。phpy使得PHP可以調(diào)用所有Python的包。 包括當(dāng)下非常流行的PyTorch、transformersTensorFlowAI庫(kù),以及Numpy、Pandas、Scikit等科學(xué)計(jì)算庫(kù),還可以使用PyQt、wxPython等圖形界面庫(kù)。

不建議在php-fpm/apache短生命周期運(yùn)行環(huán)境下使用,頻繁地導(dǎo)入 / 銷(xiāo)毀模塊的開(kāi)銷(xiāo)會(huì)消耗大量資源

編譯安裝

phpy可以作為PHP的擴(kuò)展,也可以作為Python的C模塊。既可以在PHP代碼中調(diào)用Python的庫(kù),也可以在Python中調(diào)用PHP的類(lèi)和函數(shù)。

作為Python模塊時(shí)依賴(lài)PHP的embed SAPI,檢查PHP的目錄中,確保存在libphp.so

ll /opt/php-8.1/lib/libphp.so
-rwxr-xr-x 1 htf htf 39397224 11月 30 19:25 /opt/php-8.1/lib/libphp.so*

編譯依賴(lài)

Python 3.10或以上版本,建議使用conda工具來(lái)安裝

PHP 8.1或以上版本

Python將安裝到/opt/anaconda3目錄下

/opt/anaconda3/bin/pythonPython主程序

/opt/anaconda3/include/python3.11頭文件

/opt/anaconda3/lib/python3.11動(dòng)態(tài)鏈接庫(kù)目錄

另外需要配置/etc/ld.so.conf.d/conda.conf加入/opt/anaconda3/lib和/opt/php-8.1/lib。執(zhí)行l(wèi)dconfig檢查是否可以找到libpython3.11.so和libphp.so。

sudo ldconfig -p |grep php
    libphp7.so (libc6,x86-64) => /opt/php-7.4/lib/libphp7.so
    libphp.so (libc6,x86-64) => /opt/php-8.0/lib/libphp.so
    
sudo ldconfig -p |grep python
    libsamba-policy.cpython-38-x86-64-linux-gnu.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libsamba-policy.cpython-38-x86-64-linux-gnu.so.0
    libpython3.11.so.1.0 (libc6,x86-64) => /opt/anaconda3/lib/libpython3.11.so.1.0
    libpython3.11.so (libc6,x86-64) => /opt/anaconda3/lib/libpython3.11.so
    libpython3.8.so.1.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0
    libpython3.8.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython3.8.so
    libpython3.5m.so.1.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython3.5m.so.1.0
    libpython3.so (libc6,x86-64) => /opt/anaconda3/lib/libpython3.so
    libpython2.7.so.1.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0
    libpython2.7.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libpython2.7.so

作為PHP擴(kuò)展

檢查config.m4中Python路徑是否正確。若Python的安裝路徑不是/opt/anaconda3,需修改為正確的安裝路徑。

cd phpy
phpize
./configure
make install

安裝成功后,修改php.ini,加入extension=phpy.so,執(zhí)行php -m和php --ri phpy檢查是否成功加載擴(kuò)展。

作為Python模塊

cmake .
make -j
執(zhí)行成功后,會(huì)生成tests/lib/phpy.so文件??梢栽赑ython中直接導(dǎo)入此模塊。
import phpy

使用方法

導(dǎo)入 Python 模塊

$os = PyCore::import('os');

執(zhí)行函數(shù)

$uname = $os->uname();

讀取屬性

echo $uname->sysname;

加載路徑

可使用PyCore::import('sys')->path->append()將一些目錄加入到加載路徑列表中。
例如:/workspace/app/user.py自定義的包,可以通過(guò)下面的步驟實(shí)現(xiàn)加載:

PyCore::import('sys')->path->append('/workspace')將/workspace添加到sys.path中

PyCore::import('app.user')將自動(dòng)搜索sys.path找到對(duì)應(yīng)的app/user.py包并載入

內(nèi)置方法

PyCore::str()將對(duì)象轉(zhuǎn)為字符串

PyCore::repr()

PyCore::type()獲取對(duì)象的類(lèi)型

PyCore::locals()獲取當(dāng)前空間內(nèi)容的所有局部變量

PyCore::globals()獲取所有全局變量

PyCore::hash()獲取 Hash 值

PyCore::hasattr()檢測(cè)對(duì)象是否存在某個(gè)屬性

PyCore::id()獲取對(duì)象的內(nèi)部編號(hào)

PyCore::len()獲取長(zhǎng)度

PyCore::dir()獲取對(duì)象所有的屬性、方法

PyCore::int()構(gòu)造一個(gè)整數(shù)

PyCore::float()構(gòu)造一個(gè)浮點(diǎn)數(shù)

PyCore::fn()構(gòu)造一個(gè)可調(diào)用函數(shù)

PyCore::scalar()將PyObject對(duì)象轉(zhuǎn)為PHP的標(biāo)量類(lèi)型,例如PyStr將轉(zhuǎn)為PHP 字符串,Dict/Tuple/Set/List將轉(zhuǎn)為Array

內(nèi)置類(lèi)

PyObject:所有其他類(lèi)型的基類(lèi)

PyDict:字典類(lèi)型,等同于PHP的關(guān)聯(lián)數(shù)組

PyList:列表類(lèi)型,等同于PHP的索引數(shù)組

PyTuple:元組,不可變的列表

PyStr:字符串

PyModule:Python包,PyModule也是PyObject的子類(lèi)

PyObject是除了PyCore之外,所有其他類(lèi)型的基類(lèi)。非內(nèi)置類(lèi)的對(duì)象是PyObject的實(shí)例。PyObject實(shí)現(xiàn)了4個(gè)魔術(shù)方法,用于將操作映射到Python對(duì)象。 所有類(lèi)方法、參數(shù)、返回值參考stubs目錄中的文件。

繼承關(guān)系

PyObject -> PyModule
         -> PySequenece -> PyList
                        -> PyTuple
         -> PySet
         -> PyStr
         -> PyDict
         -> PyType

整數(shù)

Python語(yǔ)言是天然支持無(wú)限精度整型計(jì)算的,可以使用Python的整數(shù)計(jì)算能力來(lái)代替ext-bcmath

構(gòu)造

使用PyCore::int()函數(shù)來(lái)構(gòu)造一個(gè)數(shù)字,可以傳入整數(shù)、浮點(diǎn)數(shù)、字符串來(lái)初始化。

$i1 = PyCore::int(12345678);
$i2 = PyCore::int('1234567890123456789012345678901234567890');
$i3 = PyCore::int(12345678.03);

運(yùn)算

整數(shù)同樣也是PyObject的實(shí)例,可以使用內(nèi)置的方法類(lèi)實(shí)現(xiàn)運(yùn)算。

$i = PyCore::int(12345435);
var_dump(strval($i->__pow__(3)));
var_dump(strval($i->__add__(4)));
將輸出1881564851360655187875,由于超過(guò)了64位最大精度,因此輸出結(jié)果將自動(dòng)轉(zhuǎn)為字符串類(lèi)型。

命名參數(shù)

phpy支持了命名參數(shù),可以使用命名參數(shù)來(lái)調(diào)用Python的函數(shù)和方法。 順序參數(shù)必須在前,命名參數(shù)必須在最后

kwargs($a, $b, $c, name: 'hello', world: 'rango');
對(duì)應(yīng)的Python代碼為:
kwargs(a, b, c, name: 'hello', world: 'rango')

回調(diào)函數(shù)

可將PHP的可調(diào)用對(duì)象作為Python的回調(diào)函數(shù)。使用PyCore::fn(callable $fn)包裹即可。

$m = PyCore::import('app.user');
$uuid = uniqid();
$rs = $m->test_callback(PyCore::fn(function ($namespace) use ($uuid) {
    var_dump($namespace);
    return $uuid;
}));

import app.user導(dǎo)入了一個(gè)自定義Python包

調(diào)用了包中的一個(gè)函數(shù)test_callback,此函數(shù)接受一個(gè)參數(shù)為Python Callable對(duì)象

使用PyCore::fn()包裹了一個(gè)Closure閉包對(duì)象作為回調(diào),這里也支持函數(shù)名稱(chēng)字符串、對(duì)象方法的調(diào)用方式

回調(diào)函數(shù)返回了一個(gè)字符串,在test_callback函數(shù)中會(huì)得到一個(gè)str類(lèi)型返回值

可參考下方的Python tkinter例子。

實(shí)際案例

基于tkinter實(shí)現(xiàn)GUI的例子

Tk();
$root->title('我的窗口');
$root->geometry("500x500");
$root->resizable(False, False);

$button= $tkinter->Button($root, text: "Click Me!!", command: PyCore::fn(function () {
    var_dump(func_get_args());
    echo 'click me!!'. PHP_EOL;
}));
$button->pack();

$tkinter->mainloop();

image.png

一個(gè)基于transformers的情感分析模型推理實(shí)現(xiàn)

environ->__setitem__('https_proxy', getenv('https_proxy'));

$distilled_student_sentiment_classifier= $transformers->pipeline(
    model: "lxyuan/distilbert-base-multilingual-cased-sentiments-student",
    top_k: null,
);

$rs= $distilled_student_sentiment_classifier("I love this movie and i would watch it again and again!");
var_dump(PyCore::scalar($rs));

image.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    40198

    瀏覽量

    301821
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    4244

    瀏覽量

    46270
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    694

    瀏覽量

    35222
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4879

    瀏覽量

    90151
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    12224

原文標(biāo)題:phpy:PHP與Python互調(diào)用庫(kù),為PHP引入Python生態(tài)

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    為什么Python Web流行度不如PHP?

    apache/nginx,fastcgi manager 負(fù)責(zé)啟動(dòng) php-cgi 進(jìn)程等,而 PHP 應(yīng)用基于文件的調(diào)用方式并不需要操心更多的維護(hù)?! ∵@對(duì)于如 Dreamhost 之類(lèi)的虛擬主機(jī)
    發(fā)表于 12-02 16:34

    零基礎(chǔ)學(xué)編程,選PHP還是Python

    對(duì)于許多想學(xué)編程的人,零基礎(chǔ)選擇學(xué)習(xí)哪個(gè)課程總是很糾結(jié)?今天小編就給大家解疑答惑。在這兩門(mén)語(yǔ)言中,小編建議大家選擇Python。為什么要大家選擇Python呢?看看PythonPHP
    發(fā)表于 05-07 18:12

    如何用php調(diào)用mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查

    php調(diào)用mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查
    發(fā)表于 04-09 12:53

    PHPPython對(duì)比 如何選擇?

    盡管 RESTful API 和跨平臺(tái)庫(kù)已經(jīng)使網(wǎng)頁(yè)開(kāi)發(fā)容易起來(lái),但依然沒(méi)有解決阻礙并隔分開(kāi)發(fā)者、管理者和消費(fèi)者的由來(lái)已久的問(wèn)題:PHP vs. Python,到底該選哪種語(yǔ)言?
    發(fā)表于 05-28 01:31 ?4728次閱讀

    LabVIEW不同VI之間相互調(diào)用的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是LabVIEW不同VI之間相互調(diào)用的詳細(xì)資料說(shuō)明,有需要的拿去。
    發(fā)表于 12-17 08:00 ?29次下載
    LabVIEW不同VI之間相<b class='flag-5'>互調(diào)用</b>的詳細(xì)資料說(shuō)明

    PHP教程之PHP與MySQL數(shù)據(jù)庫(kù)連接的資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是PHP教程之PHP與MySQL數(shù)據(jù)庫(kù)連接的資料說(shuō)明包括了:1.web數(shù)據(jù)庫(kù)架構(gòu),2.建立一個(gè)連接,3.選擇數(shù)據(jù)庫(kù)
    發(fā)表于 04-18 17:04 ?8次下載
    <b class='flag-5'>PHP</b>教程之<b class='flag-5'>PHP</b>與MySQL數(shù)據(jù)<b class='flag-5'>庫(kù)</b>連接的資料說(shuō)明

    使用Python實(shí)現(xiàn)身份證號(hào)碼歸屬地的數(shù)據(jù)庫(kù)調(diào)用代碼實(shí)例

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用Python實(shí)現(xiàn)身份證號(hào)碼歸屬地的數(shù)據(jù)庫(kù)調(diào)用代碼實(shí)例。
    發(fā)表于 01-15 15:19 ?15次下載

    Arduino庫(kù)直接調(diào)用沒(méi)有原庫(kù)復(fù)雜調(diào)用有用的數(shù)據(jù)

    本文檔的主要內(nèi)容詳細(xì)介紹的是Arduino庫(kù)直接調(diào)用沒(méi)有原庫(kù)復(fù)雜調(diào)用有用的數(shù)據(jù)免費(fèi)下載。
    發(fā)表于 03-04 08:00 ?5次下載

    C代碼與javaScript函數(shù)的相互調(diào)用問(wèn)題應(yīng)該如何解決

    本文檔的主要內(nèi)容詳細(xì)介紹的是C代碼與javaScript函數(shù)的相互調(diào)用問(wèn)題應(yīng)該如何解決。
    發(fā)表于 03-05 11:47 ?17次下載

    使用PythonPHP獲取天氣信息

    電子發(fā)燒友網(wǎng)站提供《使用PythonPHP獲取天氣信息.zip》資料免費(fèi)下載
    發(fā)表于 01-04 11:03 ?1次下載
    使用<b class='flag-5'>Python</b>和<b class='flag-5'>PHP</b>獲取天氣信息

    python讀取數(shù)據(jù)庫(kù)數(shù)據(jù) python查詢(xún)數(shù)據(jù)庫(kù) python數(shù)據(jù)庫(kù)連接

    python讀取數(shù)據(jù)庫(kù)數(shù)據(jù) python查詢(xún)數(shù)據(jù)庫(kù) python數(shù)據(jù)庫(kù)連接
    的頭像 發(fā)表于 08-28 17:09 ?3071次閱讀

    Python環(huán)境搭建和LabVIEW中的調(diào)用

    本文主要介紹Python相關(guān)的環(huán)境搭建、Anaconda的使用以及在LabVIEW中調(diào)用Python的方法。
    的頭像 發(fā)表于 10-13 17:56 ?6463次閱讀
    <b class='flag-5'>Python</b>環(huán)境搭建和LabVIEW中的<b class='flag-5'>調(diào)用</b>

    python調(diào)用windows命令

    Python是一種強(qiáng)大的編程語(yǔ)言,可以用于開(kāi)發(fā)各種不同類(lèi)型的應(yīng)用程序。其中一個(gè)常見(jiàn)的用途是使用Python調(diào)用Windows命令來(lái)執(zhí)行特定的任務(wù)。在本文中,我們將詳細(xì)討論如何使用Python
    的頭像 發(fā)表于 11-29 14:34 ?1890次閱讀

    phppython一樣嗎

    PHPPython是兩種不同的編程語(yǔ)言,盡管它們都用于開(kāi)發(fā)Web應(yīng)用程序,但它們有許多不同之處。從語(yǔ)法、用途、社區(qū)到性能和生態(tài)系統(tǒng)等方面來(lái)講,PHPPython在許多方面都有不同之
    的頭像 發(fā)表于 12-04 15:47 ?2204次閱讀

    Python調(diào)用API教程

    兩個(gè)不同系統(tǒng)之間的信息交互。在這篇文章中,我們將詳細(xì)介紹Python調(diào)用API的方法和技巧。 一、用Requests庫(kù)發(fā)送HTTP請(qǐng)求 使用Python
    的頭像 發(fā)表于 11-03 09:15 ?978次閱讀