【问题标题】:Cleaning build directory in setup.py在 setup.py 中清理构建目录
【发布时间】:2010-12-08 08:47:06
【问题描述】:

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

【问题讨论】:

    标签: python build distutils


    【解决方案1】:

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

    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 之后的任何清理。
    【解决方案2】:

    this 会回答吗? IIRC,您需要使用 --all 标志来摆脱 build/lib 之外的东西:

    python setup.py clean --all
    

    【讨论】:

    • 似乎并非所有setup.py 脚本都支持clean。示例:NumPy
    • clean 在我的情况下适用于某些文件,但例如.egg 目录保留在那里......有什么方法可以“深度清洁”?
    • 啊,在我的例子中,有一个 makefile,所以我可以从那里make clean...(使用 cookiecutter 创建的简单模块)
    • 不幸的是,这并没有清理distegg-info目录,所以我只是为rm -rf ./build ./dist ./*egg-info做了一个shell脚本,让PyCharm的运行配置管理工作目录。
    【解决方案3】:

    这是一个将 Martin 答案的编程方法与 Matt 答案的功能相结合的答案(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}
        )
    

    【讨论】:

    • 简单地运行一个又一个命令,“别名”似乎是一个更好的解决方案:setuptools.readthedocs.io/en/latest/…
    • @Florian,我想在某些情况下别名可能是更好的解决方案。然而,在我的情况下,我为我生成的每个包生成一次 setup.py 文件。将逻辑放入生成 setup.py 文件的模板中只是一次性成本。
    【解决方案4】:

    对于预删除,只需在调用 setup 之前使用distutils.dir_util.remove_tree 将其删除即可。

    对于后期删除,我假设您只想在选定命令之后进行后期删除。子类化相应的命令,覆盖其运行方法(在调用基本运行后调用 remove_tree),并将新命令传递到 setup 的 cmdclass 字典中。

    【讨论】:

      猜你喜欢
      • 2013-04-21
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 2012-04-09
      • 2021-03-02
      • 2018-04-20
      • 2023-02-17
      • 2016-05-26
      相关资源
      最近更新 更多