Pip安装后脚本交互输入?

时间:2017-10-03 19:27:57

标签: python pip post-install

我是python包装的新手,并尝试为同事创建一个与pip兼容的设置和安装后脚本。安装后脚本的目标是创建一个配置文件,该文件将为最终用户及其系统定制,虽然我想我可以让他们在安装后运行辅助安装脚本,但似乎更有意义我只需要setup.py脚本和相关的安装后处理事项。

问题是,虽然使用easy-install或un-tarballing包并且运行python setup.py install工作正常,但pip不会。我认为pip可能是基于这个discussion from 2015禁止与stdout和stdin的交互,但是我不确定是不是这样,或者我只是没有正确地做到这一点。即使我将-vvvpip install一起使用,我仍然无法从post-install.py脚本中获得输出或交互性。

有没有人知道一个好的解决方法,让安装后的脚本与pip交互运行?安装后的脚本有点长,所以我不会在这里发布,但这是我的setup.py脚本,以防我需要从这里处理它:

import sys, os
from setuptools import setup
from setuptools.command.install import install as _install
from subprocess import call

import my_package

def _post_install(dir):
    call([sys.executable, 'postinstall.py'])


class install(_install):
    def run(self):
        _install.do_egg_install(self)
        self.execute(_post_install, (self.install_lib,), msg="Running post install task")

def readme():
    with open('README.rst') as fh:
        return fh.read()

config = {
    'name'                   : 'my_package',
    'description'            : ('My Package'),
    'long_description'       : readme(),
    'version'                : my_package.__version__,
    'author'                 : 'My Name',
    'author_email'           : 'my.email@email.com',
    'download_url'           : 'https://download.link.com',
    'test_suite'             : 'nose.collector',
    'tests_require'          : ['nose'],
    'packages'               : ['my_package'],
    'install_requires'       : ['requests'],
    'scripts'                : ['bin/script1.py',
                                'bin/script2.py',
                               ],
    'include_package_data'   : True,
    'zip_safe'               : False,
    'license'                : 'MIT',
    'cmdclass'               : {'install' : install}
}

setup(**config)

0 个答案:

没有答案