我有一个基准测试套件,它比较了编写和执行一些简单玩具Python代码的不同方法,主要是为了说明Cython。
我以前采用的方法之一是用纯C编写测试函数,用C编译器编译它(让distutils为我找到并调用编译器)然后用ctypes将库加载到Python中,并且执行功能。
这种方法很有效,直到distutils开始将python版本和平台嵌入到它生成的文件的名称中。
在过去,我可以说服distutils将名为C.c
的C源文件编译到工作目录中名为C.so
的库中:distutils的最新版本坚持将输出名称修改为某些内容表单build/temp.linux-x86_64-3.6
或(取决于我使用的distutils功能)在该主题上的其他变量。
有没有办法说服当前版本的distutils简单地调用当前工作目录中的输出C.so
? (或者,是否有一些方法可以轻松地告诉ctypes distutils生成的库所在的位置?)
[Bonus:如何在Linux,OS X和Windows上轻松表达这个想法?]
=============================================== ==================
编辑:为了完整性,以下是我以前成功完成的方法:
pure_C_setup.py
:
from distutils.core import setup, Extension
setup(name="ctypes-test",
ext_modules = [Extension("C", ["C.c"])])
使用上述设置文件,用于的命令python pure_C_setup.py install --install-lib=.
在工作目录中生成C.so
;今天它产生build/lib.linux-x86_64-3.6/C.cpython-36m-x86_64-linux-gnu.so
答案 0 :(得分:0)
不是平台,甚至不是独立于编译器,但您可以使用Extension setup(name="ctypes-test",
ext_modules = [Extension("C", ["C.c"], extra_link_args="/OUT:C.pyd")])
来实现您想要的目标。
对于VCPP 2015:
foreach ($config["targets"] as $key => $value) {
if ($value['name'] == "target1") {
echo $value['apiKey'];
}
}