文章目录[隐藏]
pypi setup.py
通过https://pypi.org/project/ 可以搜索模块并download files 查看其他人的模块如何构建的。
通过官方教程Packaging Python Projects以一个简单的例子介绍打包的基本工作过程,官方教程中推荐使用setup.cfg。可参考API Reference,Building C and C++ Extensions with distutils
博客Python 库打包分发(setup.py 编写)简易指南以及Python 包构建教程为相关的中文教程以及补充。
.cu ext_module
当模块包含用c/c++写的代码时,需要使用ext_module 进行拓展,在前面的教程中有相关的说明,但是当模块中包含采用CUDA编写的 .cu 文件时,setup.py就不能通过简单的ext_module进行拓展了。
在文章三、faster-rcnn源码阅读:C/C++/CU扩展的编译和安装中介绍了多重拓展CUDA的方式,如cupy 中采用的无需编译直接调CUDA源码的方式;PyTorch中构建的 torch.utils.cpp_extension 里面BuildExtension, CppExtension,CUDAExtension可以帮助生成扩展代码,完成度很高,但依赖torch;还有使用Cython进行构建的,但没有详解。
在文章cython代码编译和setup.py文件编写中介绍了Cython在setup.py里面的使用,其中提到了一个pytorch版本中的fasterrcnn 源码的setup.py具有较大参考价值,采用Cython,重写了cmdclass build_ext,检测CUDA的home, nvcc, include, lib64并使用ext_modules进行.cu文件的nvcc/gcc编译。其中编译命令可以参考CUDA toolkit documentation
但采用这个方法进行改写的时候出现了一些问题,没找到指定输出名的接口,编译出现问题。
简单但不正规
将.cu文件直接进行打包,不编译,当import 模块运行相关代码时检测链接库.so,如果不存在直接进行编译
os.system('nvcc -Xcompiler -fPIC -shared -o a.so a.cu') # linux
os.system('nvcc -o a.dll --shared a.cu') # win
其中nvcc采用采用上述pytorch版fasterrcnn的setup.py里检测的nvcc path。
其他tips
在 MANIFEST.in里面include modules/file.dll
可直接涵盖到非.py文件
在模块包同级终端下python3 -m build
构建dist文件夹生成tar.gz/.whl文件。
可以直接pip install dist/pydpmtest-0.3.0.tar.gz
进行安装测试,在相应环境的site-packages中可以找到,可使用python import 进行测试。
之后可通过python3 -m twine upload --repository testpypi dist/*
上传testpypi(官方教程).
或者twine upload dist/*
直接上传pypi.
setup.py中的name
即为模块名,上传 搜索 安装均采用这个名字,但是安装后在site-packages/Python中是py_modules
。
其他参考
setup.py实现C++扩展和python库编译
PyTorch 源码解读之 cpp_extension:揭秘 C++/CUDA 算子实现和调用全流程
版权声明:本文为CSDN博主「Dustone_Mu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HalcyonBravado/article/details/121337352
暂无评论