获取Python的LIB路径

iva*_*eev 5 python python-c-api compiler-options

我看到那INCLUDE条路是sysconfig.get_path('include')

但我看不到有任何类似的价值LIB

NumPy 直接os.path.join(sys.prefix, "libs")Windows中那样对其进行硬编码,否则(在Windows中get_config_var('LIBDIR')没有记录和丢失)。

还有更多受支持的方法吗?

iva*_*eev 4

由于它不是任何官方规范/文档的一部分,并且如另一个答案所示,有时未设置sysconfig/中的任何适当变量,distutils.sysconfig .get_config_var()

在所有情况下可靠地获取它的唯一方法, 就像构建一样(例如,即使对于源树中的Python),也是委托给参考实现。

在 中distutils,为编译器设置库路径的逻辑位于 中distutils.commands.build_ext.finalize_options()。因此,这段代码将获得它,并且不会对构建产生任何副作用:

import distutils.command.build_ext    #imports distutils.core, too
d = distutils.core.Distribution()
b = distutils.command.build_ext.build_ext(d)  #or `d.get_command_class('build_ext')(d)',
                                              # then it's enough to import distutils.core
b.finalize_options()
print b.library_dirs
Run Code Online (Sandbox Code Playgroud)

注意:

  • 并非结果列表中的所有位置都一定存在。
  • 如果您的setup.py基于setuptools-,请相应地使用setuptools.Distribution和。setuptools.command.build_ext
  • 如果您传递任何setup()影响结果的值,Distribution则也必须将它们传递到此处。

由于无法保证您需要传递的附加值集将保持不变,并且仅在构建扩展时才需要该值,

  • 看来你根本不应该独立获得这个值
    • 如果您使用其他构建工具,则应该build_ext在构建期间进行子类化并从基本方法获取值。