2016-05-16 96 views
0

随着蟒蛇Python3.5达尔文,下面的函数pkg_resources.resource_filename:如何返回完全限定的共享库名称?

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'

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

有谁知道如何返回完全合格的共享库,所以我可以用

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

?在此先感谢您的帮助

回答

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' 
相关问题