python कघर एक साधारण पोस्ट इंस्टॉल स्क्रिप्ट के साथ डिस्टुटिल्स का विस्तार कैसे करें?




स्पीड पोस्ट इन्क्वायरी (4)

मॉड्यूल और प्रोग्राम इंस्टॉल किए जाने के बाद मुझे एक सरल स्क्रिप्ट चलाने की आवश्यकता है। मैं यह करने के लिए कैसे आगे सीधे प्रलेखन ढूँढने में थोड़ी परेशानी हो रही है। ऐसा लगता है कि मुझे distutils.command.install से इनहेरिट करने की आवश्यकता है, कुछ विधियों को ओवरराइड करें और इस ऑब्जेक्ट को सेटअप स्क्रिप्ट में जोड़ें। बारीकियों हालांकि थोड़ा धुंधला है और यह इस तरह के एक साधारण हुक के लिए बहुत प्रयास की तरह लगता है। क्या किसी को यह करने का एक आसान तरीका पता है?


मैंने कस्टम कमांड का एक गुच्छा बनाने के लिए इसके बारे में पर्याप्त जानने के लिए एक दिन के लिए डिस्टुटिल्स स्रोत के माध्यम से खोदा। यह सुंदर नहीं है, लेकिन यह काम करता है।

import distutils.core
from distutils.command.install import install
...
class my_install(install):
    def run(self):
        install.run(self)
        # Custom stuff here
        # distutils.command.install actually has some nice helper methods
        # and interfaces. I strongly suggest reading the docstrings.
...
distutils.core.setup(..., cmdclass=dict(install=my_install), ...)

मैं जोईसेनिग के उत्तर का काम नहीं कर सका और अपने जवाब को विस्तार से विचलित documentation अनुरूप बना दिया। मैं इस कोड के साथ आया था जो मेरी मशीन पर ठीक काम करता है।

from distutils import core
from distutils.command.install import install
...
class my_install(install):
    def run(self):
        install.run(self)
        # Custom stuff here
        # distutils.command.install actually has some nice helper methods
        # and interfaces. I strongly suggest reading the docstrings.
...
distutils.core.setup(..., cmdclass={'install': my_install})

नोट: मैं जो का जवाब नहीं दे रहा हूं क्योंकि मैं अनिश्चित हूं कि उसका जवाब मेरी मशीन पर काम क्यों नहीं कर रहा था।


ठीक है, मैंने पता लगा लिया। विचार मूल रूप से डिस्टुटिल कमांड में से एक का विस्तार करने और रन विधि को अधिलेखित करने के लिए है। नए वर्ग का उपयोग करने के लिए डिस्टुटिल्स बताने के लिए आप cmdclass वेरिएबल का उपयोग कर सकते हैं।

from distutils.core import setup
from distutils.command.install_data import install_data

class post_install(install_data):
    def run(self):
        # Call parent 
        install_data.run(self)
        # Execute commands
        print "Running"

setup(name="example",
      cmdclass={"install_data": post_install},
      ...
      )

उम्मीद है कि यह किसी और की मदद करेगा।


मुझे एक त्रुटि मिली जब मैंने यहां स्वीकृत उत्तर की कोशिश की (हो सकता है क्योंकि मैं इस विशेष मामले में पायथन 2.6 का उपयोग कर रहा हूं, निश्चित नहीं)। यह 'setup.py install' और 'pip install' दोनों के लिए हुआ:

sudo python setup.py install

त्रुटि के साथ विफल रहता है : setup.cfg में त्रुटि: कमांड 'my_install' के पास ऐसा कोई विकल्प नहीं है 'single_version_externally_managed'

तथा

sudo pip install . -U

अधिक मौखिक रूप से विफल रहता है, लेकिन त्रुटि के साथ भी : विकल्प - सिंगल्स-संस्करण-बाह्य-प्रबंधित-पहचाना नहीं गया

स्वीकृत उत्तर पर भिन्नता

सेटप्टूल के साथ डिस्टिलिट्स से आयात को बदलने से मेरे लिए समस्या हल हो गई:

from setuptools import setup
from setuptools.command.install import install




distutils