pkg_resources.resource_filename:如何返回完全限定的共享库名称?

时间:2016-05-16 20:04:37

标签: python shared-libraries setuptools pkg-resources

在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))

?在此先感谢您的任何帮助

1 个答案:

答案 0 :(得分:1)

SOABI是您正在寻找的关键;返回python2上的None和python3.5上的相关扩展位。我也添加了扩展名后缀,但不确定如何在python3.5上运行(在我的情况下,SHLIB_EXT为py27返回".so",为py3返回None

>>> 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'