【问题标题】:pkg_resources.resource_filename: how to return fully qualified shared library name?pkg_resources.resource_filename:如何返回完全限定的共享库名称?
【发布时间】:2016-05-16 20:04:37
【问题描述】:

在Darwin上用Anaconda Python3.5,如下函数

import pkg_resources pkg_resources.resource_filename('icqsol', 'icqLaplaceMatricesCpp')

会返回类似

的东西

'//anaconda/lib/python3.5/site-packages/icqsol-0.3.19-py3.5-macosx-10.5-x86_64.egg/icqsol/icqLaplaceMatricesCpp'

而我需要的是

'/anaconda/lib/python3.5/site-packages/icqsol-0.3.19-py3.5-macosx-10.5-x86_64.egg/icqsol/icqLaplaceMatricesCpp.cpython-35m-darwin.so'

在这种特殊情况下,请注意后缀 '.cpython-35m-darwin.so'。我相信 setuptools 在使用 python 3.5 时会自动添加这个后缀——使用 python 2.7 时它不存在。

有人知道如何返回完全限定的共享库以便我可以使用

import ctypes sharedLibName = ... lib = ctypes.cdll.LoadLibrary(sharedLibName))

?在此先感谢您的帮助

【问题讨论】:

    标签: python shared-libraries setuptools pkg-resources


    【解决方案1】:

    SOABI 是您要查找的密钥;在 python2 上返回 None,在 python3.5 上返回相关扩展位。我也添加了扩展后缀,但不确定它在 python3.5 上是如何工作的(在我的身上,SHLIB_EXT 返回 ".so" 用于 py27 和 None 用于 py3)

    >>> import sys
    >>> print(sys.version_info)
    sys.version_info(major=3, minor=5, micro=1, releaselevel='final', serial=0)
    >>> import sysconfig
    >>> sysconfig.get_config_vars('SOABI')
    ['cpython-35m-darwin']
    >>> sysconfig.get_config_vars().get('SHLIB_EXT', '.so')
    '.so'
    

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2019-10-09
      • 2012-11-21
      • 1970-01-01
      相关资源
      最近更新 更多