Pertanyaan Bagaimana saya bisa menambahkan skrip post-install ke easy_install / setuptools / distutils?


Saya ingin dapat menambahkan hook ke setup.py saya yang akan dijalankan setelah instalasi (baik ketika easy_install'ing atau ketika melakukan python setup.py install).

Di proyek saya, PySmellSaya memiliki beberapa file pendukung untuk Vim dan Emacs. Ketika seorang pengguna menginstal PySmell dengan cara biasa, file-file ini disalin di dalam telur yang sebenarnya, dan pengguna harus memancingnya keluar dan menempatkannya di direktori .vim atau .emacs-nya. Yang saya inginkan adalah bertanya kepada pengguna, setelah instalasi, di mana dia ingin file-file ini disalin, atau bahkan hanya pesan yang mencetak lokasi file dan apa yang harus dia lakukan dengan file tersebut.

Apa cara terbaik untuk melakukan ini?

Terima kasih

Setup.py saya terlihat seperti ini:

#!/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:

Berikut ini sebuah rintisan yang menunjukkan 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},
    ...

Tidak beruntung dengan rute easy_install belum.


32
2017-10-30 12:42


asal


Jawaban:


Itu tergantung pada bagaimana pengguna menginstal paket Anda. Jika pengguna benar-benar menjalankan "setup.py install", itu cukup mudah: Cukup tambahkan perintah lain ke perintah install (misalnya, install_vim), yang menjalankan () metode akan menyalin file yang Anda inginkan di tempat yang Anda inginkan. Anda dapat menambahkan perintah Anda untuk menginstal.sub_commands, dan meneruskan perintah ke setup ().

Jika Anda ingin skrip pasca-pemasangan dalam biner, itu tergantung pada jenis biner yang Anda buat. Misalnya, bdist_rpm, bdist_wininst, dan bdist_msi memiliki dukungan untuk skrip pasca-pemasangan, karena format pengepakan yang mendasari mendukung skrip pasca-pemasangan.

bdist_egg tidak mendukung mekanisme paska pemasangan berdasarkan desain:

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


7
2017-10-31 10:33



Sebagai work-around, Anda dapat mengatur opsi zip_ok ke false sehingga proyek Anda diinstal sebagai direktori unzip, maka akan sedikit lebih mudah bagi pengguna Anda untuk menemukan file konfigurasi editor.

Dalam distutils2, dimungkinkan untuk menginstal hal-hal ke lebih banyak direktori, termasuk direktori kustom, dan untuk memiliki pre / post-install / remove hooks.


0
2017-10-28 15:56