我希望 plpython3u 为 python 使用虚拟环境。我在PostgreSQL PL/Python 中看到了一些关于 virtualenv 的(旧的且不是特别清楚的)指令:在 virtualenv 中调用存储过程。但是我还没有看到任何关于 python venv 的东西。这可以做到吗?如果可以,怎么做?谢谢。
四氯化碳。
我希望 plpython3u 为 python 使用虚拟环境。我在PostgreSQL PL/Python 中看到了一些关于 virtualenv 的(旧的且不是特别清楚的)指令:在 virtualenv 中调用存储过程。但是我还没有看到任何关于 python venv 的东西。这可以做到吗?如果可以,怎么做?谢谢。
四氯化碳。
如果您只需要一个venv
PL/Python环境,您可以简单地ExecStart
在PostggreSQL单元文件中修改以加载venv
activate
脚本。
以下摘自PGDG YUM 安装的 PostgreSQL 14 systemd 单元文件(我的venv
ls 位于/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=#