如何删除构建产品
How to remove build products
是否可以自动删除由基于 setuptools 的 setup.py
脚本生成的构建产品?
我刚刚开始一个新的 Python 项目,这是我作为开发人员第一次使用 setuptools,所以我可能会遇到一些问题.当我使用 python setup.py bdist
构建项目时,会创建三个目录,build
、dist
和一个以 .egg-info
结尾的目录。当我然后 运行 python setup.py clean
它似乎什么也没做,只是打印这个:
running clean
我已经尝试将 --all
添加到 clean
命令,虽然它确实删除了 build
目录中的一些文件,但它不会删除目录本身或任何其他两个目录中的文件。
我假设这应该很容易实现,我只是找错了地方。我已经习惯了这个功能,例如从几乎所有使用 make
的项目中,其中 make clean
或 make distclean
将删除任何构建产品。
标准方法:
distutils.command.clean
来自Cleaning build directory in setup.py and the documentation:
This command removes the temporary files created by build and its subcommands, like intermediary compiled object files. With the --all option, the complete build directory will be removed.
另一种方法:
这可能不是最佳解决方案:
从评论 below this answer 看来,python setup.py clean --all
有时无法删除所有内容(评论示例中的 Numpy)。
It seems not all setup.py scripts support clean. Example: NumPy – kevinarpe Jun 15 '16 at 7:14
您可以在设置脚本中使用 remove_tree()
命令:
import glob
remove_tree(['dist', glob.glob('*.egg-info')[0],glob.glob('build/bdist.*')[0]])
或在设置脚本中:
from setuptools import setup
from setuptools.command import install
class PostInstallCommand(install):
def run(self):
import glob
from distutils.dir_util import remove_tree
remove_tree(['dist', glob.glob('*.egg-info')[0],glob.glob('build/bdist.*')[0]])
setup(name='Some Name',
version='1.0',
description='A cross platform library',
author='Simon',
platforms = ["windows", "mac", "linux"],
py_modules = ['UsefulStuff', '__init__'],
cmdclass = {'install':PostInstallCommand}
)
我解决它的另一种方法是手动删除所有内容(使用 shutil and glob):
import shutil, glob
shutil.rmtree('dist')
shutil.rmtree(glob.glob('*.egg-info')[0])
shutil.rmtree(glob.glob('build/bdist.*')[0])
将它添加到设置脚本中比较困难,但使用 this answer,它应该看起来像这样:
from setuptools import setup
from setuptools.command import install
class PostInstallCommand(install):
def run(self):
import shutil, glob
shutil.rmtree('dist')
shutil.rmtree(glob.glob('*.egg-info')[0])
shutil.rmtree(glob.glob('build/bdist.*')[0])
install.run(self)
setup(name='Some Name',
version='1.0',
description='A cross platform library',
author='Simon',
platforms = ["windows", "mac", "linux"],
py_modules = ['UsefulStuff', '__init__'],
cmdclass = {'install':PostInstallCommand}
)
cmdclass = {'install'}
允许安装后 class 到 运行。 See this answer for more details.
是什么让我产生了使用 shutil 的想法?
使用 shutil 的想法来自旧 documentation:
Some of this could be replaced with the shutil module?
是否可以自动删除由基于 setuptools 的 setup.py
脚本生成的构建产品?
我刚刚开始一个新的 Python 项目,这是我作为开发人员第一次使用 setuptools,所以我可能会遇到一些问题.当我使用 python setup.py bdist
构建项目时,会创建三个目录,build
、dist
和一个以 .egg-info
结尾的目录。当我然后 运行 python setup.py clean
它似乎什么也没做,只是打印这个:
running clean
我已经尝试将 --all
添加到 clean
命令,虽然它确实删除了 build
目录中的一些文件,但它不会删除目录本身或任何其他两个目录中的文件。
我假设这应该很容易实现,我只是找错了地方。我已经习惯了这个功能,例如从几乎所有使用 make
的项目中,其中 make clean
或 make distclean
将删除任何构建产品。
标准方法:
distutils.command.clean
来自Cleaning build directory in setup.py and the documentation:
This command removes the temporary files created by build and its subcommands, like intermediary compiled object files. With the --all option, the complete build directory will be removed.
另一种方法:
这可能不是最佳解决方案:
从评论 below this answer 看来,python setup.py clean --all
有时无法删除所有内容(评论示例中的 Numpy)。
It seems not all setup.py scripts support clean. Example: NumPy – kevinarpe Jun 15 '16 at 7:14
您可以在设置脚本中使用 remove_tree()
命令:
import glob
remove_tree(['dist', glob.glob('*.egg-info')[0],glob.glob('build/bdist.*')[0]])
或在设置脚本中:
from setuptools import setup
from setuptools.command import install
class PostInstallCommand(install):
def run(self):
import glob
from distutils.dir_util import remove_tree
remove_tree(['dist', glob.glob('*.egg-info')[0],glob.glob('build/bdist.*')[0]])
setup(name='Some Name',
version='1.0',
description='A cross platform library',
author='Simon',
platforms = ["windows", "mac", "linux"],
py_modules = ['UsefulStuff', '__init__'],
cmdclass = {'install':PostInstallCommand}
)
我解决它的另一种方法是手动删除所有内容(使用 shutil and glob):
import shutil, glob
shutil.rmtree('dist')
shutil.rmtree(glob.glob('*.egg-info')[0])
shutil.rmtree(glob.glob('build/bdist.*')[0])
将它添加到设置脚本中比较困难,但使用 this answer,它应该看起来像这样:
from setuptools import setup
from setuptools.command import install
class PostInstallCommand(install):
def run(self):
import shutil, glob
shutil.rmtree('dist')
shutil.rmtree(glob.glob('*.egg-info')[0])
shutil.rmtree(glob.glob('build/bdist.*')[0])
install.run(self)
setup(name='Some Name',
version='1.0',
description='A cross platform library',
author='Simon',
platforms = ["windows", "mac", "linux"],
py_modules = ['UsefulStuff', '__init__'],
cmdclass = {'install':PostInstallCommand}
)
cmdclass = {'install'}
允许安装后 class 到 运行。 See this answer for more details.
是什么让我产生了使用 shutil 的想法?
使用 shutil 的想法来自旧 documentation:
Some of this could be replaced with the shutil module?