python - 在 plpython3u 过程中导入 Python 包时出现 "Module not found"

标签 python python-3.x postgresql macos plpython

我在 MacOS 上的 postgres 数据库上使用 plpython3 存储函数(使用标准企业数据库包安装)。

我可以导入标准的 python 包,例如:

CREATE OR REPLACE FUNCTION foo(x double precision)
RETURNS double precision
LANGUAGE plpython3u
AS $$
import math
...
$$

我不能,但是导入我安装在机器上常规 python3 目录中的包,该目录由 brew 定义:

$ which python3
/usr/local/bin/python3

所以 import foo 将无法工作,即使它可以在常规 python3 环境中工作。

有没有可能PostgreSQL服务器在运行plpython3u时没有使用和我一样的python3环境? (也许它使用的是 python3 解释器,这是 MacOS 等的标准问题)我如何检查它以及如何在事件中更正配置?

事实上,我创建了一个存储函数 get_py,它执行以下操作:

import os
return os.popen('which python').read()

它返回:

> select get_py()
+-----------------+
| get_py          |
|-----------------|
| /usr/bin/python |
+-----------------+

(which python3 没有)。这似乎表明它没有使用我想要的解释器!

我该如何更改?

配置信息

  • PostgreSQL 11.5 on x86_64-apple-darwin,由 Apple LLVM version 6.0 编译
  • 我在这里没有使用任何virtualenv

最佳答案

除了 shell 脚本 (pg_service.sh) 中的 PGDATA 等其他环境变量外,设置 PYTHONPATH='/path/to/python:/path/to/your/模块'

例如cat/Users/postgres/pg_service.sh

export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5432
export PATH=/Library/PostgreSQL/11/bin:$PATH
export PGLOCALEDIR=/Library/PostgreSQL/11/share/locale
export PYTHONUSERBASE=/Users/postgres/packaging_tutorial
export PYTHONPATH=/Library/edb/languagepack-11/Python-3.6:$PYTHONUSERBASE
pg_ctl -D /Library/PostgreSQL/11/data -l /Users/postgres/logfile $1

启动服务器:

> sudo -u postgres /Users/postgres/pg_service.sh start
waiting for server to start.... done
server started 

/Users/postgres/packaging_tutorial/example_pkg/__init__.py:

def retpy3():
    return 7/5

pg函数:

CREATE OR REPLACE FUNCTION expy3()
RETURNS text
LANGUAGE plpython3u
AS $$
import example_pkg
return example_pkg.retpy3()
$$;

输出

psql  -c 'select * from expy3()';
 expy3
--------
 1.4

关于python - 在 plpython3u 过程中导入 Python 包时出现 "Module not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57774168/

相关文章:

python - 通过带有 MultiIndex 的 .at 从 pd.DataFrame 选择显式单元格

python - 无法在 Windows 上安装 PyTables

python - 使用 group by 函数进行字符串模式聚合

python-3.x - 波形符 TRUE 与 isalpha() 返回 -2 而不是 FALSE

python-3.x - 导入错误 : No module named 'TkTreectrl'

python - 如何在 ScalarFormatter 之后更改双对数图的 xticks 和 yticks?

SQL:- 我正在尝试获取表中的行,其中最多 3 行的数量应该 <=1024

SQL如何限制特定列的数量?

python - Django DATETIME_FORMAT 特定日期不正确(一年)

python - 我如何报告在整个脚本中从未匹配的任何正则表达式?