Effectuer un traitement arbitraire lors de l'installation à l'aide des outils de configuration

Lors de la création d'un package Python à l'aide de setuptools, j'étais en difficulté [1](# 1) </ sub> parce que je ne pouvais pas "copier le répertoire dans un emplacement arbitraire lors de l'exécution de l'installation", alors je l'ai forcé. Je l'ai essayé.

setup.py


# coding: utf-8
import setuptools
from setuptools.command.install import install
import shutil

#Étendez la commande d'installation standard
class my_install(install):
  description = "install myapp"
  
  #Ajoutez les options requises pour votre traitement
  user_options = install.user_options + [
    ('my-data-dir=', 'd', "base directory for installing my data files." ),
  ]
  def initialize_options(self):
    self.my_data_dir = '/opt/myapp-data' #Définir la valeur par défaut
    install.initialize_options(self)

  def _pre_install(self):
    #Écrivez ce que vous voulez faire
    shutil.copytree('./data',self.my_data_dir)

  def run(self):
    #Insérez le processus que vous souhaitez effectuer avant d'exécuter le processus d'installation d'origine.
    self._pre_install()
    install.run(self)

  def get_outputs(self):
    # get_les sorties est--Appelée lorsque l'option d'enregistrement est spécifiée, elle renvoie une liste de fichiers et de répertoires créés lors de l'installation.
    #S'il y a quelque chose que vous souhaitez supprimer lorsque vous désinstallez, renvoyez-le ici.
    return install.get_outputs(self) + [self.my_data_dir]

setuptools.setup(
  name='myapp',
  version='1.0',
  description='my python application',
  author='kokm',
  author_email='xxx@xxx',
  url='http://xxx.xxx/yyy',

  #Remplacez la commande d'installation par la vôtre
  cmdclass={'install': my_install},
)

Etendez setuptools.command.install comme vous le souhaitez et passez-le comme paramètre cmdclass desetup (). c'est tout. Bien entendu, les commandes autres que install peuvent être étendues de la même manière.

Méthode d'exécution

Exécutez setup.py normalement. Les options ajoutées sont bien reflétées dans la sortie de setup.py install --help.

python


cd myapp
python setup.py install --my-data-dir=/opt/myapp-data

Lorsque vous utilisez pip, veuillez noter que l'option que vous avez ajoutée ne passera pas à moins que vous n'utilisiez --install-option.

python


pip install --install-option='--my-data-dir=/opt/myapp-data' myapp-1.0.tar.gz
pip uninstall myapp

référence

http://pythoninside.com/en/source-code/2.7.5/distutils/command/install.py

1. Vous pouvez copier par fichier en utilisant install_data.

Recommended Posts

Effectuer un traitement arbitraire lors de l'installation à l'aide des outils de configuration
Effectuez périodiquement un traitement arbitraire avec Python Twisted