簡體   English   中英

如何在不使用distutils的情況下創建Python C擴展?

[英]How to create a Python C extension without using distutils?

我正在嘗試創建一個用CUDA C編寫的Python擴展。我不認為distutils支持使用nvcc編譯器,因此我想學習如何在不使用distutils的情況下創建Python C擴展,並使其適應構建用CUDA C編寫的擴展的方法。

我正在使用Windows,當使用distutils時,我發現構建擴展會產生.exp,.lib,.obj和.pyd文件。 我猜測.exp,.lib和.obj文件以某種方式組合到.pyd文件中,但不知道如何。

我能夠通過以下示例創建一個使用CUDA的Cython擴展:

https://github.com/saullocastro/programming/tree/master/cuda/cython/naive_add

基本上,您使用nvcc在命令行中編譯CUDA代碼以生成.lib文件。 然后在制作Cython擴展時使用該.lib文件,就像它是從C編譯一樣。這樣,distutils仍然可以用於構建擴展,但是在CUDA代碼由nvcc手動編譯之后。

我必須做的一個小改動是在命令中添加numpy include目錄來構建擴展。 這是我使用的命令:

python setup.py build_ext -i -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" -I"C:\Anaconda\Lib\site-packages\numpy\core\include" -lcudart -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" --force clean

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM