我问的是这个问题,因为我需要构建一个特定的模块(aspell_python,http://wm.ite.pl/proj/aspell-python/)来处理我的64位Python 2.6,它运行在Windows 7(当然是64位)的机器上。我也一直想知道如何使用C代码加速某些功能,所以我希望将来为Python创建自己的外部C模块。
有谁能告诉我在C中成功构建64位Python扩展所需的步骤?我知道Python,我知道C,但我不了解Visual Studio或Windows特定的开发人员问题。我尝试使用Visual Studio 2008(这是此处唯一可用的商业产品)遵循Python网站(http://docs.python.org/extending/windows.html#building-on-windows)上的官方指南,但即使是最基本的例子也无法建立。
答案 0 :(得分:8)
我之前通过在扩展源代码分发的顶级目录中运行“Visual Studio 2008 x64 Win64命令提示符”中的以下命令,成功编译了64位Windows上的C扩展:
set DISTUTILS_USE_SDK=1
set MSSdk=1
python setup.py install
答案 1 :(得分:2)
我使用Shed Skin:只需下载,解压缩,运行init bat和compile your Python code。
如果这不起作用,并且您可以使Microsoft的C编译器环境正常工作,请尝试Cython。 This tutorial将普通的Python扩展与其生成的C版本进行比较。更新摘录:
c_prime.pyx:
def calculate(long limit):
cdef long current
cdef long divisor
primes = []
divisor = 0
for current in range(limit):
previous = []
for divisor in range(2, current):
if current % divisor == 0:
break
if divisor == current - 1:
primes.append(current)
return primes
setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup(
name = 'PrimeTest',
ext_modules=[
Extension('c_prime', ['c_prime.pyx'])
],
cmdclass = {'build_ext': build_ext}
)
编译:
python setup.py build_ext --inplace --compiler=msvc
test_prime.py:
from timeit import Timer
t = Timer('c_prime.calculate(10000)', 'import c_prime')
reps = 5
print(sum(t.repeat(repeat=reps, number=1)) / reps)