Python 包安裝和 postgresql 的一些問題
今天安裝 hgvs 這個 python 包的時候,遇到幾個比較有代表性的問題,記錄分享一下。
hgvs is a Python package to parse, format, validate, normalize, and map biological sequence variants according to recommendations of the Human Genome Variation Society.
怎么查看 python 未安裝包的依賴
我們知道的pip show hgvs和pipdeptree -p hgvs都只能看到已安裝 Python 包的依賴,但是未安裝的 Python 包依賴目前通過pip應(yīng)該是暫時沒法看的。stackoverflow 上看到一個折中的方法,比較繁瑣。
In [1]: import requests
In [2]: url = 'https://pypi.org/pypi/{}/json'
In [3]: json = requests.get(url.format('hgvs')).json()
In [4]: json['info']['requires_dist']
Out[4]:
['attrs (>=17.4.0)',
'biocommons.seqrepo (<1.0)',
'bioutils (<1.0,>=0.4.0)',
'configparser (>=3.3.0)',
'ipython',
'parsley',
'psycopg2-binary',
'six']
In [5]: json['info']['requires_python']
Out[5]: ''
除此之外,可以通過 conda 的方式查看(conda search hgvs --info)。
Psycopg requires libpq >= 9.1
hgvs 的安裝依賴于psycopg2-binary,而psycopg2-binary又依賴于psycopg2。
$ pip install psycopg2
Collecting psycopg2
Downloading psycopg2-2.9.1.tar.gz (379 kB)
|████████████████████████████████| 379 kB 133 kB/s
Using legacy 'setup.py install' for psycopg2, since package 'wheel' is not installed.
Installing collected packages: psycopg2
Running setup.py install for psycopg2 ... error
ERROR: Command errored out with exit status 1:
......
In file included from psycopg/psycopgmodule.c:28:0:
./psycopg/psycopg.h:31:2: error: #error "Psycopg requires PostgreSQL client library (libpq) >= 9.1"
#error "Psycopg requires PostgreSQL client library (libpq) >= 9.1"
......
CentOS 6 默認的 PostgreSQL 最高版本為 8.4.18,需要安裝 9.1 以上版本的 postgresql 才可以解決以上出現(xiàn)的 "Psycopg requires PostgreSQL client library (libpq) >= 9.1" 問題。
CentOS/Red Hat 安裝 PostgreSQL
使用yum list postgresql*命令可以看到:
CentOS 6 默認的 PostgreSQL 最高版本為 8.4.18;
CentOS 7 默認的 PostgreSQL 最高版本為 9.2.24。
1. 配置 yum 源
該步驟安裝完成后,會在 /etc/yum.repos.d 目錄下生成一個 pgdg-redhat-all.repo,里面為 PostgreSQL 各個版本的源信息。
# Red Hat Enterprise Linux 7 - x86_64
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# CentOS 7 - x86_64
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Red Hat Enterprise Linux 6 - x86_64
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# CentOS 6 - x86_64
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
最新的 yum 源 rpm 包可以在這里找到:
- https://yum.postgresql.org/repopackages/
2. 安裝
yum 源安裝完成后,再次執(zhí)行yum list postgresql*命令可以看到 postgresql、postgresql10、postgresql11*、…. 各個版本的 PostgreSQL 列表,選擇需要的版本安裝。
yum install -y postgresql10 postgresql10-devel
yum 的方式安裝的 PostgreSQL10 默認保存在 /usr/pgsql-10 下面;如果是 9.6,則對應(yīng) /usr/pgsql-9.6,以此類推。
3. 初始化與啟動
具體自己去谷歌,或者參考:《Linux 下 PostgreSQL 源碼編譯安裝》。
undefined symbol: PQescapeIdentifier
安裝完 psycopg2 和 hgvs 后,如果 import 過程中出現(xiàn)類似于 _psycopg.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PQescapeIdentifier 的異常,可以查看一下 _psycopg.cpython-37m-x86_64-linux-gnu.so 的對應(yīng)的動態(tài)庫鏈接 libpq.so 是否正確。
$ ldd /SoftWare/Python-3.7.3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-x86_64-linux-gnu.so
linux-vdso.so.1 => (0x00007fff65bff000)
libpq.so.5 => /usr/lib64/libpq.so.5 (0x00007fbe7bb03000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbe7b8e6000)
libc.so.6 => /lib64/libc.so.6 (0x00007fbe7b551000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fbe7b2e5000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007fbe7af00000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fbe7acbb000)
libldap_r-2.4.so.2 => /lib64/libldap_r-2.4.so.2 (0x00007fbe7aa67000)
/lib64/ld-linux-x86-64.so.2 (0x0000003636a00000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fbe7a781000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fbe7a57c000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fbe7a350000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fbe7a14c000)
libz.so.1 => /RiboBio/Bioinfo/APPS/R-3.3.2/lib/libz.so.1 (0x00007fbe79f34000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fbe79d29000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fbe79b26000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fbe7990b000)
liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007fbe796fc000)
libssl3.so => /usr/lib64/libssl3.so (0x00007fbe794bf000)
libsmime3.so => /usr/lib64/libsmime3.so (0x00007fbe79292000)
libnss3.so => /usr/lib64/libnss3.so (0x00007fbe78f54000)
libnssutil3.so => /usr/lib64/libnssutil3.so (0x00007fbe78d28000)
libplds4.so => /lib64/libplds4.so (0x00007fbe78b23000)
libplc4.so => /lib64/libplc4.so (0x00007fbe7891e000)
libnspr4.so => /lib64/libnspr4.so (0x00007fbe786e1000)
libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00007fbe784c6000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fbe782a7000)
librt.so.1 => /lib64/librt.so.1 (0x00007fbe7809e000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fbe77e67000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007fbe77bf0000)
正常情況下,/usr/lib64/libpq.so.5 應(yīng)該對應(yīng)于 /usr/pgsql-10/lib/libpq.so.5,如果不是,可以參考下面兩種方法:
通過設(shè)置 LD_LIBRARY_PATH,使其鏈接正確的動態(tài)庫。
export LD_LIBRARY_PATH=/usr/pgsql-10/lib:$LD_LIBRARY_PAT
先備份重命名 /usr/lib64/libpq.so.5,再把正確的 libpq.so.5 軟連接過去。
$ mv /usr/lib64/libpq.so.5 /usr/lib64/libpq.so.5.old
$ ln -s /usr/pgsql-10/lib/libpq.so.5 /usr/lib64/libpq.so.5

Python Excel 操作 | xlrd+xlwt 模塊筆記
如何卸載 python setup.py install 安裝的包?
本文分享自微信公眾號 - 生信科技愛好者(bioitee)。
如有侵權(quán),請聯(lián)系 support@oschina.cn 刪除。
本文參與“OSC源創(chuàng)計劃”,歡迎正在閱讀的你也加入,一起分享。

浙公網(wǎng)安備 33010602011771號