web-dev-qa-db-fra.com

Python setuptools: comment inclure un fichier de configuration pour distribution dans <prefix> / etc

Comment puis-je écrire setup.py pour que:

  1. La distribution binaire d'oeufs (bdist_Egg) inclut un exemple de fichier de configuration et
  2. Lors de l'installation, le place dans le {prefix}/etc répertoire?

Un exemple de répertoire source de projet ressemble à ceci:

bin/
   myapp
etc/
   myapp.cfg
myapp/
    __init__.py
    [...]
setup.py

Le setup.py ressemble à ceci:

from distutils.command.install_data import install_data

packages = ['myapp', ]
scripts = ['bin/myapp',]
cmdclasses = {'install_data': install_data}
data_files = [('etc', ['etc/myapp.cfg'])]

setup_args = {
    'name': 'MyApp',
    'version': '0.1',
    'packages': packages,
    'cmdclass': cmdclasses,
    'data_files': data_files,
    'scripts': scripts,
#    'include_package_data': True,
    'test_suite': 'nose.collector'
}

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

setup(**setup_args)

setuptools sont installés à la fois dans l'environnement de génération et dans l'environnement d'installation.

Le 'include_package_data' commenté ou non n'aide pas.

35
Victor Olex

Je faisais des recherches sur ce problème et je pense que la réponse se trouve dans la documentation de setuptools: http://peak.telecommunity.com/DevCenter/setuptools#non-package-data-files

Ensuite, je cite l'extrait qui, je pense, a la réponse:

Fichiers de données hors package

Les distutils installent normalement des "fichiers de données" généraux à un emplacement spécifique à la plate-forme (par exemple/usr/share). Cette fonctionnalité est destinée à être utilisée pour des choses comme la documentation, des exemples de fichiers de configuration , etc. setuptools n'installe cependant pas ces fichiers de données dans un emplacement séparé. Ils sont regroupés dans le fichier ou le répertoire Egg, aux côtés des modules et packages Python. Les fichiers de données sont également accessibles à l'aide de l'API Resource Management [...]

Notez, en passant, que cette encapsulation de fichiers de données signifie que vous ne pouvez pas réellement installer des fichiers de données à un emplacement arbitraire sur la machine d'un utilisateur ; c'est une fonctionnalité, pas un bug. Vous pouvez toujours inclure un script dans votre distribution qui extrait et copie votre documentation ou vos fichiers de données vers un emplacement spécifié par l'utilisateur, à sa discrétion. Si vous placez les fichiers de données associés dans un seul répertoire, vous pouvez utiliser resource_filename () avec le nom du répertoire pour obtenir un répertoire du système de fichiers qui peut ensuite être copié avec le module shutil. [...]

17
Akhorus