我正在尝试向Python distutils添加后安装任务,如How to extend distutils with a simple post install script?中所述。该任务应该在已安装的lib目录中执行Python脚本。该脚本生成安装软件包所需的其他Python模块。使用distutils/setuptools执行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},
)
这种方法的工作原理,但据我所知有两个缺点:
- 如果用户使用了比其他Python解释器从
PATH
中挑选出一个,安装后脚本将使用不同的解释器执行,这可能会导致问题。 - 对于干运行等是不安全的,我可以通过将它包装在函数中并用
distutils.cmd.Command.execute
来调用它来弥补。
我该如何改进我的解决方案?有没有推荐的方法/最佳做法?如果可能的话,我想避免拉入另一个依赖项。
对于那些希望能够使用'python setup.py install'以及'pip install'的用户,请参阅:http://stackoverflow.com/questions/21915469/python-setuptools-install-requires -is-ignored-when-overriding-cmdclass –