Как я могу сделать так, чтобы мой setup.py
предварительно удалял и удалял каталог сборки?
Очистка каталога сборки в setup.py
Ответы (4)
Для предварительного удаления просто удалите его с помощью distutils.dir_util.remove_tree
перед вызовом установки.
Для пост-удаления я предполагаю, что вы хотите пост-удалить только после выбранных команд. Создайте подкласс соответствующей команды, переопределите ее метод запуска (для вызова remove_tree после вызова базового запуска) и передайте новую команду в словарь cmdclass установки.
Отвечает ли это? IIRC, вам нужно будет использовать флаг --all
, чтобы избавиться от вещей за пределами build/lib
:
python setup.py clean --all
setup.py
скрипты поддерживают clean
. Пример: NumPy
- person kevinarpe; 15.06.2016
make clean
оттуда... (простой модуль, созданный с помощью cookiecutter)
- person ntg; 20.05.2020
dist
и egg-info
, поэтому я просто создал сценарий оболочки для rm -rf ./build ./dist ./*egg-info
, позволив конфигурации запуска PyCharm управлять рабочим каталогом.
- person hlongmore; 02.07.2020
Это очищает каталог сборки перед установкой
python setup.py clean --all install
Но в соответствии с вашими требованиями: Это сделает это до и после
python setup.py clean --all install clean --all
clean --all
игнорируется. Я пробовал следующее python3 ./setup.py clean --all install clean --all
, и каталог build
сохраняется. В выводе ни слова об очистке после install
.
- person Hans Deragon; 16.07.2020
Вот ответ, который сочетает в себе программный подход ответа Мартина с функциональностью ответа Мэтта (clean
, который заботится обо всех возможных областях сборки):
from distutils.core import setup
from distutils.command.clean import clean
from distutils.command.install import install
class MyInstall(install):
# Calls the default run command, then deletes the build area
# (equivalent to "setup clean --all").
def run(self):
install.run(self)
c = clean(self.distribution)
c.all = True
c.finalize_options()
c.run()
if __name__ == '__main__':
setup(
name="myname",
...
cmdclass={'install': MyInstall}
)