在较新的Ubuntu / Debian版本下,libpython2.7.so
位于/usr/lib/i386-linux-gnu/libpython2.7.so
或/usr/lib/x86_64-linux-gnu/libpython2.7.so
等之下。早期,无论架构如何,都可以在/usr/lib/libpython2.7.so
中找到它们。我没有检查其他发行版。如何使用python找到libpython2.7.so
的路径?
答案 0 :(得分:8)
使用pkg-config
不是最佳选择 - 它不会区分不同的Python安装,只返回系统安装。最好使用Python可执行文件来发现libpythonX.Y.so
的位置。
从Python内部:
from distutils import sysconfig;
print sysconfig.get_config_var("LIBDIR")
或者在Makefile中:
PYTHON_LIBDIR:=$(shell python -c 'from distutils import sysconfig; print sysconfig.get_config_var("LIBDIR")')
这将从$PATH
中的第一个Python可执行文件中发现位置,因此如果系统上有多个Python安装,它将起作用。
归功于Niall Fitzgerald指出这一点。
答案 1 :(得分:1)
这是我的解决方案,它似乎适用于系统范围的Debian和CentOS安装,Debian上的anaconda,OSX上的miniconda,Debian上的virtualenv ......但是OSX上的系统级python失败了:
from distutils import sysconfig;
import os.path as op;
v = sysconfig.get_config_vars();
fpaths = [op.join(v[pv], v['LDLIBRARY']) for pv in ('LIBDIR', 'LIBPL')];
print(list(filter(op.exists, fpaths))[0])
在这里它在我的笔记本电脑上运行:
$> for p in python python3 ~/anaconda-4.4.0-3.6/bin/python ~datalad/datalad-master/venvs/dev/bin/python ; do $p -c "from distutils import sysconfig; import os.path as op; v = sysconfig.get_config_vars(); fpaths = [op.join(v[pv], v['LDLIBRARY']) for pv in ('LIBDIR', 'LIBPL')]; print(list(filter(op.exists, fpaths))[0])"; done
/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.so
/home/yoh/anaconda-4.4.0-3.6/lib/libpython3.6m.so
/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
P.S。我不知道这是一个问题......糟糕的坏坏Python
答案 2 :(得分:0)
我假设您正在寻找链接此文件。 Python通常与pkgconfig
信息一起安装,以帮助编译它。特别是对于.so
文件,您应该使用pkg-config --libs python-2.7
。来自Python:
import subprocess
subprocess.check_output(["pkg-config", "--libs", "python-2.7"])
如果显示的唯一标志是-lpython2.7
,您可能需要考虑阅读/etc/ld.so.conf
以查看链接器查找其库的默认位置。