核心
所有 Python
的内置函数均作为 PyCore
类的静态方法,内置方法的使用参考 Python
文档。
导入包
$os = PyCore::import('os');
成功后返回一个 PyModule
对象。可以导入 Python
内置的包,也可以导入其他第三方的包,或者用户自定义的包。
只能加载模块,不支持 Python
的 from module import class
语法,可用下面的语法代替。
$module = PyCore::import($moduleName);
$class = $m->$className;
Python
底层会缓存已加载过的模块,当第二次加载时会自动返回缓存中的模块,不会重复加载。因此在 PHP-FPM/Apache
等短生命周期环境下也可使用,不会有性能问题。
加载路径
可使用 PyCore::import('sys')->path->append()
将一些目录加入到加载路径列表中。
例如:/workspace/app/user.py
自定义的包,可以通过下面的步骤实现加载:
PyCore::import('sys')->path->append('/workspace')
将/workspace
添加到sys.path
中PyCore::import('app.user')
将自动搜索sys.path
找到对应的app/user.py
包并载入
内置方法
PyCore::import($module)
导入模块PyCore::str()
将对象转为字符串PyCore::repr()
PyCore::type()
获取对象的类型PyCore::locals()
获取当前空间内容的所有局部变量PyCore::globals()
获取所有全局变量PyCore::hash()
获取 Hash 值PyCore::hasattr()
检测对象是否存在某个属性PyCore::id()
获取对象的内部编号PyCore::len()
获取长度PyCore::dir()
获取对象所有的属性、方法PyCore::int()
构造一个整数PyCore::float()
构造一个浮点数PyCore::fn()
构造一个可调用函数PyCore::eval()
执行Python
代码PyCore::dict()
构造一个字典对象PyCore::set()
构造一个集合对象PyCore::range()
构造一个范围序列PyCore::scalar()
将PyObject
对象转为PHP
的标量类型,例如PyStr
将转为PHP 字符串
,Dict/Tuple/Set/List
将转为Array
PyCore
实现了__callStatic()
魔术方法,对于PyCore
静态方法调用会自动调用Python
的builtins
模块对应的方法 , 可参考 Built-in Functions 了解更多内置方法的使用
动态链接库问题
导入库是发生动态链接库错误,原因可能是 LD
路径错误导致,可设置环境变量指定 Python C 模块
动态库路径。
可使用
:
分割设置多个路径
# 仅使用 anaconda3 base 环境
export LD_LIBRARY_PATH=/opt/anaconda3/lib
# 使用了特别的环境,名称为 cef
export LD_LIBRARY_PATH=/opt/anaconda3/envs/cef/lib:/opt/anaconda3/lib
php plot.php
这种方式仅对当前的 bash
会话有效,不会影响全局。不要直接修改 /etc/ld.so.conf.d/*.conf
增加 /opt/anaconda3/lib
,这可能会导致
libc
库冲突,可能会影响操作系统其他程序的正常运行。
大小写敏感
请注意 Python
中所有函数、方法、变量、属性等均命名全部为大小写敏感,调用时必须使用与Python
大小写完全一致的名称。
例如:
def TestUser():
pass
在 PHP
代码中必须使用 $module->TestUser()
,其他的方式如 $module->testUser()
、$module->testuser()
均是错误的写法。