我正在尝试向Pythondistutils添加安装后任务,如如何使用简单的安装后脚本扩展distutils中所述。。该任务应该 在已安装的lib目录中 执行Python脚本。该脚本生成安装的软件包所需的其他Python模块。
我的第一次尝试如下:
from distutils.core import setup from distutils.command.install import install class post_install(install): def run(self): install.run(self) from subprocess import call call(['python', 'scriptname.py'], cwd=self.install_lib + 'packagename') setup( ... cmdclass={'install': post_install}, )
这种方法有效,但是据我所知有两个缺陷:
PATH
distutils.cmd.Command.execute
我该如何改善解决方案?有推荐的方法/最佳做法吗?如果可能,我想避免引入其他依赖项。
解决这些缺陷的方法是:
setup.py
sys.executable
distutils.cmd.Command
distutils.command.install.install
execute
但是请注意,该--dry-run选项当前已损坏,无论如何都无法正常工作。
--dry-run
我得到了以下解决方案:
import os, sys from distutils.core import setup from distutils.command.install import install as _install def _post_install(dir): from subprocess import call call([sys.executable, 'scriptname.py'], cwd=os.path.join(dir, 'packagename')) class install(_install): def run(self): _install.run(self) self.execute(_post_install, (self.install_lib,), msg="Running post install task") setup( ... cmdclass={'install': install}, )
请注意,我将类名install用于派生类,因为这python setup.py --help-commands将使用。
install
python setup.py --help-commands