可以说我想从命令行使用gcc
来编译Python的C扩展。我会构造这样的电话:
gcc -o applesauce.pyd -I C:/Python35/include -L C:/Python35/libs -l python35 applesauce.c
我注意到
-I
,-L
和-l
选项是绝对必要的,否则您将看到类似于this的错误。这些命令告诉gcc在哪里寻找 header (-I
),在哪里寻找静态库(-L
),以及实际使用的静态库(python35
,实际上转换为libpython35.a
)。现在,如果您的机器上有
libs
和include
目录,这显然很容易,因为如果您不希望它们,它们就永远不会改变。但是,我正在编写一个程序,该程序会从其他人使用的命令行中调用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
最佳答案
如果您在build_ext.py
方法中从distutils
查看 finalize_options
的来源,您将找到用于查找库的不同平台的代码。
关于python - 从Python内部返回include和运行时lib目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36341553/