简体   繁体   English

Docker 上的 PostgreSQL:如何在 `plpython3u` 下安装和运行 python 依赖项?

[英]PostgreSQL on Docker: How to install and run python dependencies under `plpython3u`?

With Dockerfile I can run plpython3u perfectly随着Dockerfile我可以运行plpython3u完美

FROM postgres:11.3

RUN apt-get update && apt-get install -y postgresql-plpython3-11
CREATE OR REPLACE FUNCTION return_version()
  RETURNS VARCHAR
AS $$
    import sys
    return sys.version
$$ LANGUAGE plpython3u;

3.5.3 (default, Jul 9 2020, 13:00:10) [GCC 6.3.0 20170516]` 3.5.3(默认,2020 年 7 月 9 日,13:00:10)[GCC 6.3.0 20170516]`

But I can't use dependencies for example requests但是我不能将依赖项用于示例requests

[38000] ERROR: ImportError: No module named 'requests' 
Where: Traceback (most recent call last): PL/Python function "return_version", line 3, 
in <module> import requests PL/Python function "return_version"

1st Attempt to do a call第一次尝试call

CREATE OR REPLACE FUNCTION return_pip()
RETURNS VARCHAR AS $$
from subprocess import call
return call(["pip", "install", "requests"])
$$ LANGUAGE plpython3u STABLE ;

No hope没有希望

[38000] ERROR: FileNotFoundError: [Errno 2] No such file or directory: 'pip' Where: Traceback (most recent call last): PL/Python function "return_ls", line 3, in <module> return call(["pip", "install", "requuest"]) PL/Python function "return_ls", line 246, in c ...

2nd Attempt第二次尝试

CREATE OR REPLACE FUNCTION return_version()
  RETURNS VARCHAR
AS $$
    import sys
    from subprocess import call
    return call(["pip3", "install", "requests"])

    import requests
    res = requests.get('https://google.com')
    print(res.text)
    return res.text
$$ LANGUAGE plpython3u;

Got error有错误

SELECT return_version()
[2020-09-29 10:59:44] [38000] ERROR: FileNotFoundError: [Errno 2] No such file or directory: 'pip3'
[2020-09-29 10:59:44] Where: Traceback (most recent call last):
[2020-09-29 10:59:44] PL/Python function "return_version", line 4, in <module>
[2020-09-29 10:59:44] return call(["pip3", "install", "requests"])
[2020-09-29 10:59:44] PL/Python function "return_version", line 246, in call
[2020-09-29 10:59:44] PL/Python function "return_version", line 675, in __init__
[2020-09-29 10:59:44] PL/Python function "return_version", line 1281, in _execute_child
[2020-09-29 10:59:44] PL/Python function "return_version"

I got similar person asking same question, but no answer我有类似的人问同样的问题,但没有答案

Question:题:
How to install and run python dependencies under plpython3u ?如何在plpython3u下安装和运行 python 依赖项?

Thanks to @AdrianKlaver for his answer感谢@AdrianKlaver 的回答

Follow this.按照这个。 I can get the response我可以得到response

  1. I pick this answer to be my image我选择这个答案作为我的形象
  2. Execute CREATE EXTENSION plpython3u;执行CREATE EXTENSION plpython3u; in SQL shell在 SQL 外壳中
  3. Run pip3 install requests In OS(aka container)在操作系统(又名容器)中运行pip3 install requests
  4. create function创建函数
    CREATE OR REPLACE FUNCTION return_version() RETURNS VARCHAR AS $$ import requests res = requests.get('https://google.com') return str(res.text) $$ LANGUAGE plpython3u;
  5. SELECT return_version(); Check the result检查结果

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM