如何为postgres pl / python安装第三方模块?

时间:2011-11-07 02:54:24

标签: 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

如何将模块安装到pl / python中,以便我可以从存储过程代码中导入它?

3 个答案:

答案 0 :(得分:20)

pl / python可以访问普通Python解释器所具有的所有模块,只要它们位于服务器上的$PYTHONPATH(以及运行postgres服务的用户)。如果在服务器上的Python解释器中运行它,import lucene是否有效?

如果您的模块安装在其他地方(例如,不是dist-packages等),那么您需要在服务器上编辑/etc/postgresql/9.1/main/environment(调整到PostgreSQL版本)文件并添加类似{{1 }}。

答案 1 :(得分:14)

由于修改postgres用户的PYTHONPATH可能需要重新启动服务器,因此通过

从Python中添加路径会更容易一些
from sys import path
path.append( '/path/to/your/module' )

答案 2 :(得分:0)

对我来说,这是关于了解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

使用以下命令执行功能:

select python_version()

在Python中:

import sys
sys.version

脚本和Python都说: 信息: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>

注意:软件包安装在: / usr / local / lib#cd python3.7 / dist-packages 不在 / usr / lib / python3 / dist-packages#

相关问题