3

我对 python 打包非常陌生,并试图为我的同事的包制作一个与 pip 兼容的设置和安装后脚本。安装后脚本的目标是创建一个将为最终用户及其系统定制的配置文件,虽然我想我可以让他们在安装后运行辅助设置脚本,但这似乎更有意义对我来说只是让 setup.py 脚本和相关的安装后处理事情。

问题是,当使用易于安装或解压缩包并运行python setup.py install正常时,pip 不会。根据2015 年的讨论,我认为 pip 可能会抑制与 stdout 和 stdin 的交互,但我不确定是否是这种情况,或者我只是做得不正确。即使我使用-vvvwithpip 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)
4

0 回答 0