【发布时间】:2010-12-08 08:47:06
【问题描述】:
如何让我的setup.py 预先删除和后删除构建目录?
【问题讨论】:
如何让我的setup.py 预先删除和后删除构建目录?
【问题讨论】:
这会在安装之前清除构建目录
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 之后的任何清理。
this 会回答吗? IIRC,您需要使用 --all 标志来摆脱 build/lib 之外的东西:
python setup.py clean --all
【讨论】:
setup.py 脚本都支持clean。示例:NumPy
make clean...(使用 cookiecutter 创建的简单模块)
dist和egg-info目录,所以我只是为rm -rf ./build ./dist ./*egg-info做了一个shell脚本,让PyCharm的运行配置管理工作目录。
这是一个将 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}
)
【讨论】:
对于预删除,只需在调用 setup 之前使用distutils.dir_util.remove_tree 将其删除即可。
对于后期删除,我假设您只想在选定命令之后进行后期删除。子类化相应的命令,覆盖其运行方法(在调用基本运行后调用 remove_tree),并将新命令传递到 setup 的 cmdclass 字典中。
【讨论】: