在setup.py中清理C++扩展构建目录

3 投票
2 回答
680 浏览
提问于 2025-04-17 12:12

我有一个Python包,其中包含一个C++扩展。

这个C++扩展是在setup.py文件中通过自己的Makefile构建的,生成的.so文件会放在它自己的子文件夹里,然后再复制到构建文件夹中。

当我运行python setup.py clean时,只有构建目录会被删除,但cxxextension/build文件夹不会被删除。所以如果我再次构建,它只是复制,而不是重新编译。

我该如何让setup.py clean也删除我的cxxextension/build文件夹呢?

2 个回答

0

我看到这个被接受的回答有点害怕,因为路径是相对的,在用Python脚本删除用户端的任何东西时要非常小心。你应该用一些方法来获取你的构建位置,比如:

curdir = os.path.dirname(os.path.realpath(__file__))
buildir = curdir+os.sep+"build"

一旦你更安全地构建了路径,就可以把这个目录传给 shutil.rmtree 来删除它。

顺便说一下,这里有更好的方法来安全地获取当前路径:如何获取当前正在执行的文件的路径和名称?

0

最简单的方法可能就是在setup.py文件中手动处理一下。在调用distutils.setup之前,你可以在里面加上类似下面的代码:

import sys, shutil
if 'clean' in sys.argv:
    shutil.rmtree('cxxextension/build')

撰写回答