чистый каталог сборки расширения C ++ в setup.py - PullRequest
3 голосов
/ 02 февраля 2012

У меня есть пакет python, который содержит расширение C ++.

Расширение C ++ создается в setup.py с использованием собственного файла Makefile, а файлы .so создаются в собственной подпапке, а затем копируются впапка сборки.

Когда я вызываю python setup.py clean, удаляется только каталог сборки, но cxxextension/build не удаляется, поэтому, если я собираю его снова, он просто копируется и не перекомпилируется.

Как я могу поручить setup.py clean также удалить мою папку cxxextension/build?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2018

Принятый ответ пугает меня, так как путь относительный, и нужно быть очень осторожным при удалении чего-либо на стороне пользователя из скрипта python.Вы должны получить ваше местоположение сборки с чем-то вроде:

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

Как только вы построите путь немного более безопасно, вы можете передать каталог в shutil.rmtree.

PS, более эффективные способы получения токапуть безопасно здесь Как мне получить путь и имя файла, который в данный момент выполняется?

0 голосов
/ 06 марта 2012

Самый простой способ, вероятно, состоит в том, чтобы просто обработать его вручную в setup.py.Вы можете добавить что-то вроде этого до вызова distutils.setup:

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