MonetDB 设置特定的嵌入式 python 版本
MonetDB set specific embedded python version
在 Linux 环境中,我希望能够将嵌入式 python3 设置为特定的 python 版本。我当前的 monetDB 安装似乎使用 3.7
,即使所有默认 python 路径都指向 3.8.6
.
有没有办法将我的 3.8.6
安装设置为默认嵌入式 python3 版本?
经过一些实验,问题似乎如下:因为您正在使用 apt
安装 MonetDB,安装会拉取发行版打包在 apt
中的 python 版本.我假设您从 python:3.8
开始构建容器。这是基于 Debian Buster that packages Python 3.7.
更详细一点:
我使用以下 Dockerfile 构建了一个容器:
FROM python:3.8
RUN apt-get update
RUN apt-get upgrade -y
COPY ./monetdb.list /etc/apt/sources.list.d/
COPY ./MonetDB-GPG-KEY /
RUN apt-key add /MonetDB-GPG-KEY
RUN apt-get update
RUN apt-get install -y monetdb5-sql monetdb-client monetdb-python3
使用 monetdb.list
和 MonetDB-GPG-KEY
中描述的文件 downloads page。
然后我在容器中创建了一个数据库场和一个新数据库,将 embedpy3
设置为 true:
root@bd0420e945e8:/# monetdbd create /tmp/dbfarm
root@bd0420e945e8:/# monetdbd start /tmp/dbfarm
root@bd0420e945e8:/# monetdb create -p monetdb pytestdb
created database with password for monetdb user: pytestdb
root@bd0420e945e8:/# monetdb set embedpy3=yes pytestdb
使用 mclient
我创建了一个 Python UDF,其中 returns 作为字符串嵌入 python 解释器的版本:
CREATE FUNCTION pyversion ()
RETURNS STRING
LANGUAGE python {
import sys
return sys.version
};
当我调用它时,我得到了以下结果:
sql>select pyversion();
+-----------------------------------------------------+
| %2 |
+=====================================================+
| 3.7.3 (default, Jul 25 2020, 13:03:44) |
: [GCC 8.3.0] :
+-----------------------------------------------------+
1 tuple
我从不同的发行版(Ubuntu Focal)开始重复上述过程,该发行版打包了不同版本的 Python(似乎 Ubuntu 已更新为 Python 3.8.5 自 Focal 发布以来)。
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y gnupg ca-certificates
COPY ./monetdb.list /etc/apt/sources.list.d/
COPY ./MonetDB-GPG-KEY /
RUN apt-key add /MonetDB-GPG-KEY
RUN apt-get update
RUN apt-get install -y monetdb5-sql monetdb-client monetdb-python3
在此容器中函数pyversion
returns如下:
sql>select pyversion();
+-----------------------------------------------------+
| %2 |
+=====================================================+
| 3.8.5 (default, Jul 28 2020, 12:59:40) |
: [GCC 9.3.0] :
+-----------------------------------------------------+
1 tuple
总而言之,我建议要么从容器中的源代码构建 MonetDB(有关说明,请参阅 README),要么从将 Python 3.8 打包到其中的分发版开始构建容器包管理器。
在 Linux 环境中,我希望能够将嵌入式 python3 设置为特定的 python 版本。我当前的 monetDB 安装似乎使用 3.7
,即使所有默认 python 路径都指向 3.8.6
.
有没有办法将我的 3.8.6
安装设置为默认嵌入式 python3 版本?
经过一些实验,问题似乎如下:因为您正在使用 apt
安装 MonetDB,安装会拉取发行版打包在 apt
中的 python 版本.我假设您从 python:3.8
开始构建容器。这是基于 Debian Buster that packages Python 3.7.
更详细一点:
我使用以下 Dockerfile 构建了一个容器:
FROM python:3.8
RUN apt-get update
RUN apt-get upgrade -y
COPY ./monetdb.list /etc/apt/sources.list.d/
COPY ./MonetDB-GPG-KEY /
RUN apt-key add /MonetDB-GPG-KEY
RUN apt-get update
RUN apt-get install -y monetdb5-sql monetdb-client monetdb-python3
使用 monetdb.list
和 MonetDB-GPG-KEY
中描述的文件 downloads page。
然后我在容器中创建了一个数据库场和一个新数据库,将 embedpy3
设置为 true:
root@bd0420e945e8:/# monetdbd create /tmp/dbfarm
root@bd0420e945e8:/# monetdbd start /tmp/dbfarm
root@bd0420e945e8:/# monetdb create -p monetdb pytestdb
created database with password for monetdb user: pytestdb
root@bd0420e945e8:/# monetdb set embedpy3=yes pytestdb
使用 mclient
我创建了一个 Python UDF,其中 returns 作为字符串嵌入 python 解释器的版本:
CREATE FUNCTION pyversion ()
RETURNS STRING
LANGUAGE python {
import sys
return sys.version
};
当我调用它时,我得到了以下结果:
sql>select pyversion();
+-----------------------------------------------------+
| %2 |
+=====================================================+
| 3.7.3 (default, Jul 25 2020, 13:03:44) |
: [GCC 8.3.0] :
+-----------------------------------------------------+
1 tuple
我从不同的发行版(Ubuntu Focal)开始重复上述过程,该发行版打包了不同版本的 Python(似乎 Ubuntu 已更新为 Python 3.8.5 自 Focal 发布以来)。
FROM ubuntu:20.04
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y gnupg ca-certificates
COPY ./monetdb.list /etc/apt/sources.list.d/
COPY ./MonetDB-GPG-KEY /
RUN apt-key add /MonetDB-GPG-KEY
RUN apt-get update
RUN apt-get install -y monetdb5-sql monetdb-client monetdb-python3
在此容器中函数pyversion
returns如下:
sql>select pyversion();
+-----------------------------------------------------+
| %2 |
+=====================================================+
| 3.8.5 (default, Jul 28 2020, 12:59:40) |
: [GCC 9.3.0] :
+-----------------------------------------------------+
1 tuple
总而言之,我建议要么从容器中的源代码构建 MonetDB(有关说明,请参阅 README),要么从将 Python 3.8 打包到其中的分发版开始构建容器包管理器。