【问题标题】:How to determine the path & name of the Python shared library?如何确定 Python 共享库的路径和名称?
【发布时间】:2010-10-16 16:40:09
【问题描述】:

给定一个编译为共享库的 Python,我如何确定这个库的名称和路径?

我正在寻找的输出类似于“/usr/local/lib/libpython2.7.so”或“/System/Library/Frameworks/Python.framework/Versions/2.6/Python”(对于框架构建在 OS X 上)。

【问题讨论】:

  • 我找到了“LDLIBRARY”配置变量;对于 OS X 上的定制 Python 设置为“libpython2.7.dylib”,对于 OS X 系统版本(构建为框架)设置为“Python.framework/Versions/2.6/Python”。不幸的是,这些都不包含完整的路径信息,我找不到合适的 var 来连接。

标签: python


【解决方案1】:

我不确定如何或是否可以在 Python 本身内完成,但您可以使用标准工具来查找 python 可执行文件的共享库依赖项。

Linux:ldd <path>/pythonldd $(which python)
麦克:otool -L <path>/python
Windows:在 python.exe 上运行 dependencywalker

【讨论】:

    【解决方案2】:

    sudo yum install python3 之后在Amazon Linux 上测试了纯 Python

    import sysconfig
    sysconfig.get_config_vars('LIBDIR', 'INSTSONAME')  
    # -> ['/usr/lib64', 'libpython3.7m.so.1.0']
    

    编辑: 请注意,某些发行版(即 Linux 和 Python >= 3.8)将不再包含共享库,但会静态链接到 libpython3.8.a。

    【讨论】:

    • 虽然它的重要性越来越低,但值得注意的是 sysconfig 模块仅在 Python3.2+ 中可用。
    • 这就是我要找的。就我而言,我必须使用'LIBPL''srcdir' 来获取包含共享库的目录。
    【解决方案3】:

    https://pypi.org/project/find-libpython/

    $ pip3 install find_libpython
    

    然后

    $ python3 -c 'import find_libpython; print(find_libpython.find_libpython())'
    /usr/local/Cellar/python@3.8/3.8.5/Frameworks/Python.framework/Versions/3.8/Python
    

    或者简单地说:

    python3 -m find_libpython
    

    【讨论】:

    • 你现在可以运行python -m find_libpython
    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    相关资源
    最近更新 更多