清理setup.py中的构建目录

Ram*_*hum 43 python distutils build

我如何进行setup.py预删除和删除后的构建目录?

Mat*_*all 103

难道这个回答呢?IIRC,你需要使用--all旗帜来摆脱以下的东西build/lib:

python setup.py clean --all
Run Code Online (Sandbox Code Playgroud)

  • 似乎并非所有`setup.py`脚本都支持`clean`.示例:NumPy (2认同)
  • 不幸的是,这并没有清理 `dist` 和 `egg-info` 目录,所以我只是为 `rm -rf ./build ./dist ./*egg-info` 创建了一个 shell 脚本,让 PyC​​harm 的运行配置管理工作目录。 (2认同)

Mar*_*wis 11

对于预删除,只需distutils.dir_util.remove_tree在调用setup之前删除它.

对于post-delete,我假设您只想在选定的命令后进行删除.子类化相应的命令,覆盖其run方法(在调用基本运行后调用remove_tree),并将新命令传递给cmdclass设置字典.


Adr*_*pez 8

这将在安装之前清除构建目录

python setup.py clean --all install
Run Code Online (Sandbox Code Playgroud)

但是根据你的要求:这将在之前和之后完成

python setup.py clean --all install clean --all
Run Code Online (Sandbox Code Playgroud)


Ala*_*lan 6

这是一个答案,结合了马丁答案的程序化方法和马特答案的功能(一个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}
    )
Run Code Online (Sandbox Code Playgroud)