我试图抓住"模块未找到"的想法时导入一个Python包在plpython3u过程中,我不知道如何使用接受的答案,使它在Linux上运行。通常情况下,这里应该是重复的,但是如果在使用的路径上与MacOS有差异,那么对于一个新问题来说可能是好的。
我在WSL2上(Ubuntu 20.04)。我安装了来自Ubuntu PostgreSQL Apt存储库的官方PostgreSQL下载页面的命令。
# Create the file repository configuration:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Import the repository signing key:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# Update the package lists:
sudo apt-get update
# Install the latest version of PostgreSQL.
# If you want a specific version, use 'html" target="_blank">postgresql-12' or similar instead of 'postgresql':
sudo apt-get -y install postgresql
这给了我PostgreSQL 13。
我安装plpython3u命令从PostgreSQL:如何安装plpythonu扩展:
sudo apt-cache search ".*plpython3.*"
sudo apt-get install postgresql-contrib postgresql-plpython3-13
因为我在WSL上,所以我开始使用以下服务:
service postgresql start
更改角色并运行psql:
sudo su postgres
psql
在postgreSQL中直接将Python版本作为存储过程进行检查:
CREATE OR REPLACE FUNCTION return_version()
RETURNS VARCHAR
AS $$
import sys
return sys.version
$$ LANGUAGE plpython3u;
输出:
CREATE FUNCTION
测试:
postgres=# SELECT return_version();
return_version
------------------------------------------
3.8.10 (default, Jun 2 2021, 10:49:15) +
[GCC 9.4.0]
(1 row)
显示安装了"PostgreSQL 13"和"Python 3.8.10"。
这正是在Linux上可以找到的。如果我只是输入一个我没有的Python版本,比如3.7
:
python3.7
我得到了概述:
Command 'python3.7' not found, did you mean:
command 'python3.8' from deb python3.8 (3.8.10-0ubuntu1~20.04)
command 'python3.9' from deb python3.9 (3.9.5-3~20.04.1)
command 'python2.7' from deb python2.7 (2.7.18-1~20.04.1)
确认没有安装两个并行安装的Python3.8
,很明显,Linux3.8.10
是PostgreSQL中用于plpython3u的版本。
简而言之,我尝试了一个导入包的函数,该函数取自PostgreSQL中的Kmeans:
CREATE OR replace FUNCTION kmeans(input_table text, columns text[], clus_num int) RETURNS bytea AS
$$
from pandas import DataFrame
from sklearn.cluster import KMeans
from pickle import dumps
all_columns = ",".join(columns)
if all_columns == "":
all_columns = "*"
rv = plpy.execute('SELECT %s FROM %s;' % (all_columns, plpy.quote_ident(input_table)))
frame = []
for i in rv:
frame.append(i)
df = DataFrame(frame).astype('float')
kmeans = KMeans(n_clusters=clus_num, random_state=0).fit(df._get_numeric_data())
return dumps(kmeans)
$$ LANGUAGE plpython3u;
输出:
CREATE FUNCTION
测试抛出错误:
postgres=# SELECT kmeans('my_table', ARRAY['col1', 'col2'],3);
ERROR: ModuleNotFoundError: No module named 'pandas'
CONTEXT: Traceback (most recent call last):
PL/Python function "kmeans", line 3, in <module>
from pandas import DataFrame
PL/Python function "kmeans"
然后,我在Python3.8
中安装了熊猫:
python3.8 -m pip install pandas
Collecting pandas
Downloading pandas-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.5 MB)
|████████████████████████████████| 11.5 MB 6.0 MB/s
Collecting python-dateutil>=2.7.3
Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
|████████████████████████████████| 247 kB 4.7 MB/s
Collecting numpy>=1.17.3
Downloading numpy-1.21.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.8 MB)
|████████████████████████████████| 15.8 MB 131 kB/s
Collecting pytz>=2017.3
Downloading pytz-2021.1-py2.py3-none-any.whl (510 kB)
|████████████████████████████████| 510 kB 5.7 MB/s
Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil>=2.7.3->pandas) (1.14.0)
Installing collected packages: python-dateutil, numpy, pytz, pandas
WARNING: The scripts f2py, f2py3 and f2py3.8 are installed in '/home/my_user/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed numpy-1.21.2 pandas-1.3.2 python-dateutil-2.8.2 pytz-2021.1
熊猫现在存放在:
python3.8 -m pip show pandas
Name: pandas
Version: 1.3.2
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: https://pandas.pydata.org
Author: The Pandas Development Team
Author-email: pandas-dev@python.org
License: BSD-3-Clause
Location: /home/my_user/.local/lib/python3.8/site-packages
Requires: numpy, python-dateutil, pytz
Required-by:
但是测试仍然会抛出相同的错误:
postgres=# SELECT kmeans('my_table', ARRAY['col1', 'col2'],3);
ERROR: ModuleNotFoundError: No module named 'pandas'
CONTEXT: Traceback (most recent call last):
PL/Python function "kmeans", line 3, in <module>
from pandas import DataFrame
PL/Python function "kmeans"
如何安装熊猫(或我需要的任何其他包),以便它是由PostgreSQL 13 plpython3u扩展Linux?
衍生问题中有另一个版本测试,但在扩展中没有显示任何内容,命令与普通bash中的命令完全相同。所以,下面的值被简化为plpython3u函数的随机测试。我添加这一点只是因为你永远不应该100%确定。对我来说,很明显,这并没有说明plpython3u实际使用的Python版本。
CREATE OR REPLACE FUNCTION get_py()
RETURNS VARCHAR
AS $$
import os
return os.popen('which python3').read()
$$ LANGUAGE plpython3u;
输出:
CREATE FUNCTION
测试:
SELECT get_py();
get_py
------------------
/usr/bin/python3+
(1 row)
和“哪个python3一样。8'
:
select get_py();
get_py
--------------------
/usr/bin/python3.8+
(1 row)
也许在安装之前,Python的默认版本必须在某个地方进行更改?这只是使用make进行安装时的一个非常模糊的猜测,在/etc/make中使用Python设置。conf,这里是这里使用的代码(2018年的问题):
将/etc/make.conf
更改为
DEFAULT_VERSIONS+= python=3.6
据说这是通过plpython3u运行并安装的(我还没有测试过):
root@db% cd /usr/ports/databases/posgresql10-plpython
root@db% make fetch
root@db% make extract
root@db% cd /usr/ports/databases/postgresql10-plpython/work/postgresql-10.5
root@db% ./configure PYTHON=/usr/local/bin/python3 --with-python --with-libraries=/usr/local/lib --with-includes=/usr/local/include/
root@db% cd /usr/ports/databases/posgresql10-plpython
root@db% make install
问题是:
python3.8-m pip安装熊猫
在运行命令的用户的主目录中安装一个包(在这种情况下是熊猫)到site-包
,这样:
/home/my_user/。local/lib/python3。8/站点包
Postgres中运行的plpython3u
扩展正在系统范围的站点包中查找该包。要在那里获得软件包,您需要执行以下操作:
sudo蟒蛇3。8-m pip安装程序
问题内容: 我使用apt-get install安装了JDK,但不知道jdk文件夹在哪里。我需要为此设置路径。有人知道这个位置吗? 问题答案: 这取决于您的打包系统…如果该命令有效,则可以键入以查找java命令的位置。我现在在OpenSUSE系统上返回(但这不是使用的系统)。 在Ubuntu上,它看起来像是在 OpenJDK中,在Suns JDK的其他子目录中(我也认为还有其他实现)。 Debia
问题内容: 我有一个Python项目,其中包含许多与distutils打包在一起的子模块。我想在C中构建一些Python扩展以生活在其中一些子模块中,但是我不明白如何使Python扩展生活在子模块中。以下是我正在寻找的最简单的示例: 这是我的Python扩展: 这是可行的: 在virtualenv中安装后,我可以这样做: 但是,我想生活在一个子模块中。我需要在此管道中进行哪些更改才能使Python
我想在python 3.7.4做: 得到这个错误: 我已经试过了: 使用和 使用本地windows和windows服务器 多次重新安装不同版本的软件包(例如和) Traceback(最近一次调用最后一次):文件"c:/用户/管理员/文档/GitHub/合同-标准-标识符-on-aws/schnelltest.py",第1行,在导入gensim文件"C:\用户\管理员\AppData\本地\程序\P
问题内容: 简而言之,我需要能够将已编译的可执行文件粘贴到Java jar文件中,然后能够从Java运行它(可能通过)。 的 原因 ,是我想使用Java来包裹ImageMagick的可执行文件成分的图像处理弹性的Map Reduce任务。EMR只希望获取一个jar文件,因此我认为没有空间在旋转的数据节点上安装软件。 问题答案: jar中的可执行文件是一种资源,您可以通过Stream访问它,并将可执
问题内容: 我有一个弹性beantalk linux-tomcat ami实例,其中安装了示例应用程序,并且可以处理公共dns。我可以ssh进入实例,但是找不到tomcat 7的住处(即用于编辑server.xml的conf目录)。我已经尝试了64位和32位ami。关于我在哪里可以找到的任何想法?我看了下: 我确实在(下为空)下找到了一个文件。 我做了: 而且该示例应用程序也可以通过公共DNS 提
问题内容: 所以我有一个Python脚本: 我正在执行这样的: 但是,我必须安装Python并将其包含在环境变量中才能正常工作。 是否可以通过某种方式将Python可执行文件与Python脚本“捆绑”在一起,以便其他人可以在没有Python的情况下在其PC上运行它? 如果只能在Windows中使用,可以。 编辑: 尝试后,我得到此错误: 问题答案: 这是一种实现方法(对于Windows,使用)。