2010-07-30 23 views
1

j'ai écrit un script autonome dépend de quelques modules modifiés. la structure du répertoire ressemble à ceci:Comment incluez-vous les modules tiers modifiés lors de l'écriture des fichiers setup.py?

client 
    setup.py 
    tsclient 
    __init__.py 
    tsup 
    utils.py 
    mutagen 
     __init__.py 
     blah.py 
     blah.py 
     ... 
    colorama 
     __init__.py 
     blah.py 
     blah.py 
     ... 

actuellement, si je viens de faire un lien symbolique le script usup à mon répertoire ~/bin, je peux appeler le script directement et il fonctionne sans problème (tout les importations correctement sans problème).

Maintenant, je veux faire un script setup.py pour que je puisse le distribuer. Je ne peux pas comprendre comment le faire. Voici ce que j'ai maintenant:

setup(
    name='tsclient', 
    version='1.0', 
    scripts=['tsclient/tsup'], 
    packages=['tsclient', 'tsclient.mutagen', 'tsclient.colorama'], 
) 

Le problème est que je ne peux pas faire import mutagen dans le script tsup parce qu'il est maintenant tsclient.mutagen. Si je change l'importation de dire from tsclient import mutagen je reçois cette erreur (à partir du fichier de Mutagène __init__.py):

ImportError: No module named mutagen._util 

Je ne pense pas que la meilleure solution est de passer par Mutagène et changer chaque instance unique de « mutagène » et le changement à "tsclient.mutagen". Est-ce ma seule option?

Répondre

2

Malheureusement, vous avez besoin de modifier pour Mutagène faire ce travail.

Heureusement Python 2.5 et ont plus tard la syntaxe pour soutenir exactement ce que vous faites.

Voir http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports.

dit Mutagène On suppose actuellement,

from mutagen import _util 

Si vous changez de dire

from . import _util 

il continuera à travailler comme un ensemble de haut niveau; et si nécessaire, vous pouvez déplacer le tout dans un sous-paquet et cela fonctionnera toujours.

(Cependant, si vous utilisez setuptools, vous pouvez ajouter un argument à la place install_requires= dans setup.py de dire setuptools que votre paquet nécessite Mutagène être installé. Ensuite, votre paquet pourrait juste import mutagen directement.)