0

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

? 提前感谢您的帮助

4

1 回答 1

1

SOABI是你要找的钥匙;返回Nonepython2 和 python3.5 上的相关扩展位。我也添加了扩展后缀,但不确定它在 python3.5 上是如何工作的(在我的,SHLIB_EXT返回".so"py27 和Nonepy3)

>>> 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'
于 2016-09-21T22:16:40.830 回答