Como adicionar pós-scripts de instalação para easy_install / setuptools / distutils?

StackOverflow https://stackoverflow.com/questions/250038

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu gostaria de ser capaz de adicionar um gancho para meu setup.py que será executado após a instalação (ou quando easy_install'ing ou ao fazer python setup.py install).

No meu projeto, PySmell , eu tenho alguns arquivos de suporte para Vim e Emacs. Quando um usuário instala PySmell da maneira usual, esses arquivos são copiados no ovo real, eo usuário tem a pescar-los e colocá-los em seus .vim ou .emacs diretórios. O que eu quero é ou perguntando ao usuário, pós-instalação, onde estaria ele como esses arquivos copiados, ou mesmo apenas uma mensagem de imprimir a localização dos arquivos e o que ele deve fazer com eles.

Qual é a melhor maneira de fazer isso?

Graças

Os meus olhares setup.py assim:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from setuptools import setup

version = __import__('pysmell.pysmell').pysmell.__version__

setup(
    name='pysmell',
    version = version,
    description = 'An autocompletion library for Python',
    author = 'Orestis Markou',
    author_email = 'orestis@orestis.gr',
    packages = ['pysmell'],
    entry_points = {
        'console_scripts': [ 'pysmell = pysmell.pysmell:main' ]
    },
    data_files = [
        ('vim', ['pysmell.vim']),
        ('emacs', ['pysmell.el']),
    ],
    include_package_data = True,
    keywords = 'vim autocomplete',
    url = 'http://code.google.com/p/pysmell',
    long_description =
"""\
PySmell is a python IDE completion helper. 

It tries to statically analyze Python source code, without executing it,
and generates information about a project's structure that IDE tools can
use.

The first target is Vim, because that's what I'm using and because its
completion mechanism is very straightforward, but it's not limited to it.
""",
    classifiers = [
        'Development Status :: 5 - Production/Stable',
        'Environment :: Console',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Topic :: Software Development',
        'Topic :: Utilities',
        'Topic :: Text Editors',
    ]


)

EDIT:

Aqui está um esboço sobre o que demonstra a python setup.py install:

from setuptools.command.install import install as _install

class install(_install):
    def run(self):
        _install.run(self)
        print post_install_message

setup(
    cmdclass={'install': install},
    ...

Sem sorte com a rota easy_install ainda.

Foi útil?

Solução

Depende de como o usuário instala o seu pacote. Se o usuário realmente funciona "setup.py install", é bastante fácil: basta adicionar outro subcomando para o comando de instalação (por exemplo, install_vim), cujo método run () irá copiar os arquivos que deseja nos lugares onde quiser. Você pode adicionar seu subcomando para install.sub_commands, e passar o comando para setup ().

Se você quiser um pós-script de instalação em um binário, que depende do tipo de binário você está criando. Por exemplo, bdist_rpm, bdist_wininst e bdist_msi tem suporte para pós-scripts de instalação, porque os formatos de embalagem subjacentes apoiar pós-instalação scripts.

bdist_egg não suporta um mecanismo de pós-instalação do projeto:

http://bugs.python.org/setuptools/issue41

Outras dicas

Como uma solução alternativa, você pode definir a opção zip_ok como false para que o seu projecto é instalado como um diretório descompactado, então será um pouco mais fácil para os usuários a encontrar o arquivo editor de configuração.

Em distutils2, será possível instalar coisas a mais diretórios, incluindo diretórios personalizados, e ter pré / pós-instalação / ganchos remover.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top