2016-05-16 45 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'