编程语言
首页 > 编程语言> > 从Python中返回包含和运行时lib目录

从Python中返回包含和运行时lib目录

作者:互联网

让我们说我想从命令行使用gcc来编译Python的C扩展.我将这样的调用结构如下:

gcc -o applesauce.pyd -I C:/Python35/include -L C:/Python35/libs -l python35 applesauce.c

我注意到-I,-L和-l选项是绝对必要的,否则你会得到一个看起来像this的错误.这些命令告诉gcc在哪里寻找标题(-I),在哪里寻找静态库(-L),以及实际使用的静态库(python35,实际上转换为libpython35.a).

现在,显然很容易获得lib并包含目录,如果它是你的机器,因为它们永远不会改变,如果你不想要它们.但是,我正在编写一个程序,从命令行调用gcc,其他人将使用.发生此调用的行看起来像这样:

from subprocess import call
import sys
filename = applesauce.c
include_directory = os.path.join(sys.exec_prefix, 'include')
libs_directory = os.path.join(sys.exec_prefix, 'libs')

call(['gcc', ..., '-I', include_direcory, '-L', libs_directory, ...])

但是,其他人将拥有不同的平台和不同的Python安装结构,因此只是加入路径并不总是有效.

相反,我需要Python中的一个解决方案,它将可靠地返回include和libs目录.

编辑:

我查看了distutils.ccompiler模块,发现了许多有用的函数,这些函数部分使用了distutils,但是让我可以自定义我的编译器完全跨平台.唯一的问题是,我需要传递包含和运行时库…

编辑2:

我查看了distutils.sysconfig,我能够可靠地返回包含所有头文件的’include’目录.我仍然不知道如何获取运行时库.

distutils.ccompiler文档是here

需要此功能的程序名为Cyther

最佳答案:

如果你在方法finalize_options中查看来自distutils的build_ext.py的源代码,你会发现用于定位libs的不同平台的代码.

标签:python,gcc,static-libraries,python-c-extension
来源: https://codeday.me/bug/20190516/1115769.html