官方推荐安装psycopg2时候使用psycopg2-binray2.8.6 模块进行安装
测试环境:aarch64 + contos7.8 + python3.8 + psycopg2-binray2.8.6
1、安装python,我已安装,安装教程参考:Centos7 编码编译python3.8
2、安装所需要的依赖模块
yum install -y postgresql postgresql-devel python3-devel
3、安装
[root@ecs-arm-wangdapeng python381]# ./bin/pip3 install psycopg2-binary
记录下通过mv修改wheel文件重命名的方式,但是这种方式不可行。
由于aarch64在下载psycopg2-binray2.8.6 模块时候没有libs依赖包,x86是有libs包的,所以手动去安装。
模块下载地址:https://pypi.org/project/psycopg2-binary/#files ----- psycopg2_binary-2.8.6-cp38-cp38-manylinux1_x86_64.whl
manylinux1_x86_64:下载会生成psycopg2_binary.libs文件夹
win_amd64.whl :libs文件夹会在psycopg2里面,.so会上个少。区别是libs存储位置和操作系统,我建议还是使用manylinux1
所以aarch64(非官方存在的whl)安装一点也不酷。
测试过程:
在x86平台,安装了python,配置环境变量,pip install psycopg2-binary后
[root@baidu1 python381]# ldd lib/python3.8/site-packages/psycopg2/_psycopg.cpython-38-x86_64-linux-gnu.so
linux-vdso.so.1 => (0x00007ffc9d7fe000)
libpq-0929ced5.so.5.11 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libpq-0929ced5.so.5.11 (0x00007f7cdbd52000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7cdbb36000)
libc.so.6 => /lib64/libc.so.6 (0x00007f7cdb768000)
libssl-dbe77c63.so.1.1.1g => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libssl-dbe77c63.so.1.1.1g (0x00007f7cdb4c6000)
libcrypto-e62d380e.so.1.1.1g => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libcrypto-e62d380e.so.1.1.1g (0x00007f7cdafaa000)
libgssapi_krb5-174f8956.so.2.2 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libgssapi_krb5-174f8956.so.2.2 (0x00007f7cdad6f000)
libldap_r-2-9bd554ba.4.so.2.10.13 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libldap_r-2-9bd554ba.4.so.2.10.13 (0x00007f7cdab04000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7cdc1ec000)
libz-a147dcb0.so.1.2.3 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libz-a147dcb0.so.1.2.3 (0x00007f7cda8ef000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f7cda6eb000)
libkrb5-fb0d2caa.so.3.3 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libkrb5-fb0d2caa.so.3.3 (0x00007f7cda437000)
libk5crypto-622ef25b.so.3.1 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libk5crypto-622ef25b.so.3.1 (0x00007f7cda20e000)
libcom_err-beb60336.so.2.1 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libcom_err-beb60336.so.2.1 (0x00007f7cda00b000)
libkrb5support-d7ce89d4.so.0.1 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libkrb5support-d7ce89d4.so.0.1 (0x00007f7cd9e00000)
libkeyutils-1-ff31573b.2.so => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libkeyutils-1-ff31573b.2.so (0x00007f7cd9bfd000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f7cd99e3000)
liblber-2-d5725c47.4.so.2.10.13 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/liblber-2-d5725c47.4.so.2.10.13 (0x00007f7cd97d4000)
libsasl2-6f25e95f.so.3.0.0 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libsasl2-6f25e95f.so.3.0.0 (0x00007f7cd95b2000)
libselinux-cf8f9094.so.1 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libselinux-cf8f9094.so.1 (0x00007f7cd9396000)
libsepol-b4f5b513.so.1 => /usr/local/python381/lib/python3.8/site-packages/psycopg2/../psycopg2_binary.libs/libsepol-b4f5b513.so.1 (0x00007f7cd914e000)
[root@baidu1 python381]# ldd lib/python3.8/site-packages/psycopg2
[root@baidu1 python381]# ./bin/python3
Python 3.8.1 (default, Dec 16 2020, 15:29:31)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import psycopg2
这个机器并没有安装pg和ptyhon3-devel等模块包,但是依然可以正常使用,说明psycopg2内置了这些.so依赖包。
但是,在aarch64却不是这样,如果你不去yum install postgresql postgresql-devel python3-devel,他就会报错。
[root@ecs-arm-wangdapeng python381]# ./bin/pip3 install psycopg2-binary
Collecting psycopg2-binary
Using cached https://files.pythonhosted.org/packages/fc/51/0f2c6aec5c59e5640f507b59567f63b9d73a9317898810b4db311da32dfc/psycopg2-binary-2.8.6.tar.gz
ERROR: Command errored out with exit status 1:
command: /opt/python381/bin/python3.8 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ndhc4kg3/psycopg2-binary/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ndhc4kg3/psycopg2-binary/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
cwd: /tmp/pip-install-ndhc4kg3/psycopg2-binary/
Complete output (23 lines):
running egg_info
creating pip-egg-info/psycopg2_binary.egg-info
writing pip-egg-info/psycopg2_binary.egg-info/PKG-INFO
writing dependency_links to pip-egg-info/psycopg2_binary.egg-info/dependency_links.txt
writing top-level names to pip-egg-info/psycopg2_binary.egg-info/top_level.txt
writing manifest file 'pip-egg-info/psycopg2_binary.egg-info/SOURCES.txt'
Error: pg_config executable not found.
官方给的解释是,目前为止,aarch64的wheel还正在进行,并未部署。
#这是yum install postgresql postgresql-devel python3-devel后
[root@ecs-arm-wangdapeng python381]# ./bin/pip3 install psycopg2-binary
Collecting psycopg2-binary
Using cached https://files.pythonhosted.org/packages/fc/51/0f2c6aec5c59e5640f507b59567f63b9d73a9317898810b4db311da32dfc/psycopg2-binary-2.8.6.tar.gz
Installing collected packages: psycopg2-binary
Running setup.py install for psycopg2-binary ... done
Successfully installed psycopg2-binary-2.8.6
WARNING: You are using pip version 19.2.3, however version 20.3.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@ecs-arm-wangdapeng python381]#
[root@ecs-arm-wangdapeng psycopg2]# ldd _psycopg.cpython-38-aarch64-linux-gnu.so
linux-vdso.so.1 (0x0000ffff8c6d0000)
libpq.so.5 => /usr/lib64/libpq.so.5 (0x0000ffff8c5f0000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x0000ffff8c5b0000)
libc.so.6 => /usr/lib64/libc.so.6 (0x0000ffff8c430000)
libssl.so.1.1 => /usr/lib64/libssl.so.1.1 (0x0000ffff8c380000)
libcrypto.so.1.1 => /usr/lib64/libcrypto.so.1.1 (0x0000ffff8c0c0000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x0000ffff8c050000)
libldap_r-2.4.so.2 => /usr/lib64/libldap_r-2.4.so.2 (0x0000ffff8bfd0000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff8c6e0000)
libz.so.1 => /usr/lib64/libz.so.1 (0x0000ffff8bf90000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x0000ffff8bf60000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x0000ffff8be50000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x0000ffff8be10000)
libcom_err.so.2 => /usr/lib64/libcom_err.so.2 (0x0000ffff8bde0000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x0000ffff8bdb0000)
libkeyutils.so.1 => /usr/lib64/libkeyutils.so.1 (0x0000ffff8bd80000)
libresolv.so.2 => /usr/lib64/libresolv.so.2 (0x0000ffff8bd40000)
liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x0000ffff8bd10000)
libsasl2.so.3 => /usr/lib64/libsasl2.so.3 (0x0000ffff8bcd0000)
libselinux.so.1 => /usr/lib64/libselinux.so.1 (0x0000ffff8bc80000)
libcrypt.so.1 => /usr/lib64/libcrypt.so.1 (0x0000ffff8bc40000)
libpcre2-8.so.0 => /usr/lib64/libpcre2-8.so.0 (0x0000ffff8bba0000)
Using cached 下载地址与py资源库地址完全吻合https://pypi.org/project/psycopg2-binary/#files,说明他是通过的源码编译的方式。
总结:如果在aarch64上想使用离线版的psycopg2-binary.so,那么需要把这些依赖全部拷贝过去,需要小心的是,每个机器的依赖模块的名称会不同