如何在python setup.py install中运行脚本文件?

13 投票
1 回答
6674 浏览
提问于 2025-04-17 19:15

问题

我知道怎么用 setup.pysetuptools 来注册一个脚本。那我该怎么在执行 python setup.py install 的时候,运行另一个脚本文件(比如说一个 make 文件)呢?

背景

我想我可以用类似这样的方式:

os.system('make maketarget') #from somewhere in the package

但是 setuptools.setup 需要一个字典,所以我不能直接把这一行放到 setup() 里面。而且我需要这个脚本在基本包通过 setup.py install 安装完成后再运行。

我知道我可以在 setup.py 中添加一个命令,但我希望这个脚本能在安装步骤中被调用。

我也可以选择简单地放一个:

if sys.argv[-1] == 'install':
    os.system('do something in the shell')

然后把这个代码块放在 setup() 之后,但这样看起来不太符合 Python 的风格(而且也容易出错,我还得找出这个包到底安装在哪里等等)。

1 个回答

7

你可以从setuptools这个工具里,继承现有的安装命令,然后加上你想要的功能。之后,你可以在设置函数中把它注册为安装命令:

from setuptools.command.install import install

class MyInstall(install):

    def run(self):
        install.run(self)
        print("\n\n\n\nI did it!!!!\n\n\n\n")

# in the setup function:
cmdclass={'install': MyInstall}

别用打印语句,直接调用你的脚本就行。

请注意,打包Python软件的方法有很多种(比如说egg等)。如果你只在安装步骤里调用你的脚本,那么在其他打包方式下是不会调用到你的脚本的。

撰写回答