2008-10-30 13 views
32

मैं अपने setup.py में एक हुक जोड़ने में सक्षम होना चाहता हूं जो पोस्ट-इंस्टाल चलाएगा (या तो जब easy_install'ing या python setup.py इंस्टॉल करते समय)।मैं पोस्ट-इंस्टॉल स्क्रिप्ट को easy_install/setuptools/distutils में कैसे जोड़ सकता हूं?

मेरी परियोजना में, PySmell, मेरे पास विम और Emacs के लिए कुछ समर्थन फ़ाइलें हैं। जब कोई उपयोगकर्ता सामान्य रूप से PySmell इंस्टॉल करता है, तो इन फ़ाइलों को वास्तविक अंडे में कॉपी किया जाता है, और उपयोगकर्ता को उन्हें मछली पकड़ना पड़ता है और उन्हें अपने .vim या .emacs निर्देशिका में रखना होता है। मैं जो चाहता हूं वह उपयोगकर्ता से पूछ रहा है, इंस्टॉलेशन के बाद, वह इन फ़ाइलों को कॉपी करने के लिए कहां पसंद करेगा, या यहां तक ​​कि फाइलों के स्थान को प्रिंट करने वाला एक संदेश और उन्हें उनके साथ क्या करना चाहिए।

ऐसा करने का सबसे अच्छा तरीका क्या है?

धन्यवाद

मेरे setup.py तो दिखाई देता है:

#!/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 = '[email protected]', 
    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', 
    ] 


) 

संपादित करें: easy_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}, 
    ... 

कोई भाग्य:

यहाँ एक ठूंठ जो python setup.py install दर्शाता है अभी तक मार्ग

+2

मुझे पता चला है कि 'setuptools.install.install को कॉल करना: रन()' स्पष्ट रूप से 'install_requires' सेटअप तर्क को हल नहीं करता है और ऐसा लगता है कि यह – astronaut

+1

@स्ट्रोनॉट उपयोग करते समय यह अलग तरीके से काम करता है 'do_egg_install', जैसा कि यहां चर्चा की गई है: http://stackoverflow.com/questions/21915469/python-setuptools-install-requires-is-ignored-when-overriding-cmdclass –

उत्तर

7

यह इस बात पर निर्भर करता है कि उपयोगकर्ता आपके पैकेज को कैसे इंस्टॉल करता है। यदि उपयोगकर्ता वास्तव में "setup.py इंस्टॉल" चलाता है, तो यह काफी आसान है: बस इंस्टॉल कमांड (कहें, install_vim) में एक और सबकॉमैंड जोड़ें, जिसका रन() विधि उन फ़ाइलों को कॉपी करेगा जहां आप चाहते हैं कि आप उन्हें चाहते हैं। आप install.sub_commands पर अपना सबकॉमैंड जोड़ सकते हैं, और कमांड को सेटअप() में पास कर सकते हैं।

यदि आप बाइनरी में पोस्ट-इंस्टॉल स्क्रिप्ट चाहते हैं, तो यह आपके द्वारा बनाई जा रही बाइनरी के प्रकार पर निर्भर करता है। उदाहरण के लिए, bdist_rpm, bdist_wininst, और bdist_msi को पोस्ट-इंस्टॉल स्क्रिप्ट के लिए समर्थन है, क्योंकि अंतर्निहित पैकिंग प्रारूप पोस्ट-इंस्टॉल स्क्रिप्ट का समर्थन करते हैं।

bdist_egg डिजाइन द्वारा एक के बाद स्थापित तंत्र का समर्थन नहीं करता:

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

+2

" बस इंस्टॉल कमांड में एक और सबकांड जोड़ें (कहें, install_vim) "और यह कैसे करता है? –

+0

इस पर कोई अद्यतन? – MavWolverine

+2

उत्तर के लिए, ** ऊपर _question_ के निचले भाग को देखें **। (@ limp-chimp, @ maverick-wolverine) –

0

एक के रूप में काम के आसपास है, तो आप गलत पर zip_ok विकल्प सेट कर सकते हैं ताकि अपनी परियोजना एक अनज़िप निर्देशिका के रूप में स्थापित किया गया है , तो आपके उपयोगकर्ताओं के लिए संपादक कॉन्फ़िगरेशन फ़ाइल ढूंढना थोड़ा आसान होगा।

distutils2 में, कस्टम निर्देशिका सहित अधिक निर्देशिकाओं में चीजों को स्थापित करना संभव होगा, और हुक को पूर्व/पोस्ट-इंस्टॉल/हटाएं।

संबंधित मुद्दे

 संबंधित मुद्दे