Pip Post-install Script Interactive Input?

I'm very new to python packaging, and trying to make a pip compatible setup and post-install script for my package for colleagues. The goal of the post-install script is to create a configuration file that will be customized to the end-user and their system, and while I guess I could just have them run a secondary setup script post installation, it seems to make more sense to me to just have the setup.py script and associated post-install handle things.

The issue is that while using either easy-install or un-tarballing the package and running python setup.py install work fine, pip will not. I think it may be that pip is inhibiting interaction with stdout and stdin based on this discussion from 2015, but I'm not sure if that's the case or I'm just not doing it correctly. Even if I use -vvv with pip install I still don't get output or interactivity from my post-install.py script.

Does anyone know a good workaround to get a post installation script to run interactively with pip? The post install script is a bit long, so I won't post it here, but here is my setup.py script in case I need to handle it from here:

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)


Asked by: Kelvin925 | Posted: 06-12-2021






Similar questions

python - How can I add post-install scripts to easy_install / setuptools / distutils?

I would like to be able to add a hook to my setup.py that will be run post-install (either when easy_install'ing or when doing python setup.py install). In my project, PySmell, I have some support files for Vim and Emacs. When a user installs PySmell the usual way, these files get copied in the actual egg, and the user has to fish them out and place th...


packaging - using setuptools with post-install and python dependencies

This is somewhat related to this question. Let's say I have a package that I want to deploy via rpm because I need to do some file copying on post-install and I have some non-python dependencies I want to declare. But let's also say I have some python dependencies that are easily available in Py...


linux - Run post-install script in a Python Egg (setuptools)

I have created a little Python egg (with setuptools) that I want to install in other machines of my LAN. I have even setup a server for the eggs and all (and the egg is properly downloaded and installed with easy_install -f http://myserver/eggrepository ) :-) I would like to know if there's a way of running an script (bash or Python) when installing it with easy_install (version 0.6c11 and python2.6). ...


python - Post-install errors while installing pywin32-216 on Windows XP

I'm using the pywin32-216.win32-py2.6.exe package to install pywin32 on Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32. I am seeing the following post install errors. Could someone help me understand what going wrong? Thanks in advance. Copied pythoncom26.dll to C:\WINDOWS\system32\pythoncom26.dll Copied pythoncomloader26.dll to C:\WINDOWS\sys...


Python packaging distribute post-install step

I am packaging a project that uses nltk. When you install nltk with pip, you get core functionalitiy, but not all the modules that come with it. To get those modules, you call nltk's download method. I tried the following, but it doesn't work, saying ImportError: No module named nltk. I assume this is happening because import nltk occurs before nltk is installed by the call to setup(...).


Are all post-install options for python setuptools broken?

I'm trying to package a build of PyQt (installers aren't provided for the configuration I need), but I can't find any packaging configuration that works. The issue is not specific to PyQt though. The problem: In order for the module to work, it needs a file in python's PREFIX directory. I understand that this may be bad form, but in my case there needs to be a qt.conf file there, and there isn't anything much I c...


python - Post-install setup.py doesn't work

I'm trying to add a post-install step into the setup.py. The installation works but the code inside run(self) is never executed. Things I've tried (with no result): Install it using both "pip install (-e) ." and "python setup.py (develop)" [and later uninstall it, reinstall it, delete .egg-info folder,...] Variations using: do_egg_install, build, bdist_egg,...


python - setup.py post-install scripts and pip install extras

I'm developing a package which has a few optional dependencies and 'extras'. Goal: I want the following two things to work: Execute my post-install code Allow for 'extras' installation Status: Currently I have been able to: Use python setup.py install or python setup.py develop to execute post-install ...


Automating post-install of Python dependency from Git using Poetry

I'm using Poetry for Python dependency management, along with PyCrate for ASN.1 encoding/decoding. PyCrate is a dependency pulled from GitHub, and once pulled from GitHub, is installed by running a setup file within the PyCrate directory. python setup.p...


python - pipenv Post-Install Actions

I'm using Python via Pharo/GToolkit's PythonBridge, which uses pipenv under the hood. Things are kicked off via this built-in PythonBridge script (install_env.sh): #!/bin/bash cd "$(dirname "$0")" export PIPENV_VENV_IN_PROJECT=1 pipenv install pipenv ru...






Still can't find your answer? Check out these communities...



PySlackers | Full Stack Python | NHS Python | Pythonist Cafe | Hacker Earth | Discord Python



top