我希望 plpython3u 为 python 使用虚拟环境。我在PostgreSQL PL/Python 中看到了一些关于 virtualenv 的(旧的且不是特别清楚的)指令:在 virtualenv 中调用存储过程。但是我还没有看到任何关于 python venv 的东西。这可以做到吗?如果可以,怎么做?谢谢。
四氯化碳。
我希望 plpython3u 为 python 使用虚拟环境。我在PostgreSQL PL/Python 中看到了一些关于 virtualenv 的(旧的且不是特别清楚的)指令:在 virtualenv 中调用存储过程。但是我还没有看到任何关于 python venv 的东西。这可以做到吗?如果可以,怎么做?谢谢。
四氯化碳。
如果您只需要一个venvPL/Python环境,您可以简单地ExecStart在PostggreSQL单元文件中修改以加载venv activate脚本。
以下摘自PGDG YUM 安装的 PostgreSQL 14 systemd 单元文件(我的venvls 位于/var/lib/pgsql/plpython/)。
ExecStartPre=/usr/pgsql-14/bin/postgresql-14-check-db-dir ${PGDATA}
#ExecStart=/usr/pgsql-14/bin/postmaster -D ${PGDATA}
ExecStart=/bin/bash -c "source /var/lib/pgsql/plpython/bin/activate && /usr/pgsql-14/bin/postmaster -D ${PGDATA}"
请注意,您需要将单元文件postgresql-14.service从复制/usr/lib/systemd/system/到/etc/systemd/system/并执行systemctl daemon-reload才能生效。
然后您可以检查PL/Python 匿名块中venv的pkg_resources模块(我安装pyyaml在我的venv环境中)。
postgres=# CREATE EXTENSION plpython3u ;
CREATE EXTENSION
postgres=# DO $$
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
plpy.notice(installed_packages_list)
$$ LANGUAGE plpython3u;
NOTICE: ['pip==9.0.3', 'pyyaml==5.4.1', 'setuptools==39.2.0']
DO
postgres=#