kak*_*eys 19 postgresql plpython
我需要在pl/python函数中导入第三方模块.似乎pl/python使用的内部python没有任何第三方模块.
我遇到这种错误:
ERROR: PL/Python: PL/Python function "to_tsvector_luc" failed
DETAIL: <type 'exceptions.ImportError'>: No module named lucene
********** Error **********
ERROR: PL/Python: PL/Python function "to_tsvector_luc" failed
SQL state: XX000
Detail: <type 'exceptions.ImportError'>: No module named lucene
Run Code Online (Sandbox Code Playgroud)
如何将模块安装到pl/python中,以便我可以从存储过程代码中导入它?
Adr*_*ian 21
pl/python可以访问普通Python解释器所具有的所有模块,只要它们位于$PYTHONPATH服务器上(以及运行postgres服务的用户).import lucene如果你在服务器上的Python解释器中运行它会有效吗?
如果您的模块安装在其他地方(例如,不是dist-packages等),那么您需要/etc/postgresql/9.1/main/environment在服务器上编辑(调整到PostgreSQL版本)文件并添加类似的东西PYTHONPATH='<path to your module>'.
小智 15
由于修改postgres用户的PYTHONPATH可能需要重启服务器,因此从Python中添加路径更容易一些
from sys import path
path.append( '/path/to/your/module' )
Run Code Online (Sandbox Code Playgroud)
小智 5
对我来说,这是关于了解 Python Postgres 正在查看哪个版本,然后安装到 /local/lib 目录,而不是 Postgres 无法识别的 .local 目录。
在 Postgres 中,创建了这个函数来识别它正在使用的 Python 版本: 。
CREATE OR REPLACE FUNCTION python_version()
RETURNS pg_catalog.text AS $BODY$
import sys
plpy.info(sys.version)
return 'finish'
$BODY$
LANGUAGE plpython3u VOLATILE SECURITY DEFINER
Run Code Online (Sandbox Code Playgroud)
使用以下命令执行函数:
select python_version()
Run Code Online (Sandbox Code Playgroud)
在Python中:
import sys
sys.version
Run Code Online (Sandbox Code Playgroud)
脚本和Python都说: INFO:3.7.3(默认,2019年8月20日,17:04:43)
pip3 install 将库放入此目录中:/home/username/.local/lib/python3.7/site-packages
使该包可供所有用户(包括 Postgres)使用。我使用了umask:
sudo su
cd ~
umask 022
pip3 install <package name>
Run Code Online (Sandbox Code Playgroud)
注意:该软件包安装在: /usr/local/lib# cd python3.7/dist-packages 而不是 /usr/lib/python3/dist-packages#
| 归档时间: |
|
| 查看次数: |
7384 次 |
| 最近记录: |