【问题标题】:What does "setup.py clean" exactly do?“setup.py clean”到底是做什么的?
【发布时间】:2013-07-22 04:02:31
【问题描述】:

使用版本 0.9.6 从setuptools 调用setup 我可以运行以下命令:

python setup.py clean

但这究竟是做什么的呢?这个命令的帮助有点稀疏,正在运行

python setup.py clean --all

给出无用的语句,例如

'build/lib.linux-i686-2.7' does not exist -- can't clean it

是否有可能使用这个clean 命令来例如自动清理以.pyc.~ 结尾的临时python 文件?用这个命令能做到吗,是否需要配置,...?

【问题讨论】:

  • 出于兴趣,您为什么想要额外的行为?我可以想象拥有一个干净的目录感觉很好,但总体上你不应该为此烦恼。有什么具体原因吗?
  • 我想要额外的行为,以便简单地指定一个目录,从该目录中将整个内容放入包中。如果不先删除临时 python 文件,所有这些临时文件都将用于打包,不是吗?此外,clean 命令可用于简单地从临时文件中清除工作目录,以清楚地查看您拥有的内容。
  • 对于包装,请考虑使用setup.py sdist。至于清理:*.pyc 文件应该不是问题,但你可以考虑find . -name "*.pyc" | xargs rm。那些 *~ 文件不是 Python 应该关心的,因为它们与 Python 无关(这也可能适用于其他一些文件类型)。
  • 以这种方式使用xargs 是危险的。请改用find -delete
  • 想象有一个包含空格的文件:a b。相反,文件ab 将被删除。更糟糕的是:想象一个文件-rf .。相反,整个目录将被删除。使用xargs 的更安全的方法是find -print0 | xargs -0 rm --,它可以在两种情况下执行正确的任务,但find -delete 是最简单的。

标签: python python-2.7 setuptools setup.py


【解决方案1】:

据我所知,它只是删除了build 子目录,Python 将所有要安装的文件放在这里,包括需要编译的扩展。

其他地方不应该有任何*.pyc 文件,除非您在源目录中的某些脚本上运行 Python(如果您运行测试可能会发生这种情况),或者直接从源目录导入模块。 *~ 文件是 emacs 备份文件,因此无论如何都不会被 setup.py 清理。 (如果您从 make clean 看到过这种行为,那仅仅是因为有人将其编码到 Makefile 中。)

您可能可以覆盖 clean 命令以(递归地)删除*.pyc 文件,但我怀疑是否有需要。一般来说,如果前者发生了变化,Python 足够聪明,可以将*.py 文件重新编译成*.pyc 文件,否则使用后者只会更快。

我遇到了一个警告,那就是在执行setup.py build_ext --inplace 时,清理不会删除已编译的模块,因为它们不在构建目录中。这对我来说感觉像是 clean 命令的缺点。

总体而言,添加 clean 命令似乎是为了符合make 的行为,但似乎并没有增加太多。

【讨论】:

  • 请看其他评论:当我创建一个包时,我想先摆脱临时文件。我不希望他们成为包裹的一部分。
  • 如果我确实使用了setup.py build_ext --inplace,有没有办法删除所有已编译的模块?
  • @Garrett 如果这些只是纯 Python 模块,您可以使用 cmets 中的 (mofidied) find 建议来解决问题:find -name "*pyc" -delete。如果还有其他文件(从 Cython 或 C 源文件编译而来),情况会更加复杂,您可以尝试为每种文件类型运行 find 命令。
  • “据我所知” - 在发布此答案之前,您能否确认您确实尝试过 python setup.py clean?对我来说,它不会删除build/,除非我使用--all
猜你喜欢
  • 2017-05-17
  • 2015-08-06
  • 2013-09-02
  • 2014-01-02
  • 2013-10-10
  • 2017-05-08
  • 2022-01-20
  • 2012-10-17
  • 2017-06-15
相关资源
最近更新 更多