如何在python setup.py install中运行脚本文件?
问题
我知道怎么用 setup.py
和 setuptools 来注册一个脚本。那我该怎么在执行 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等)。如果你只在安装步骤里调用你的脚本,那么在其他打包方式下是不会调用到你的脚本的。