对于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))
提前感谢的任何帮助
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'