2010-05-21 4 views
0

Je suis en train d'écrire un packacge foobar qui se compose des modules alice, bob, charles et david.Comment écrire une solution personnalisée en utilisant un paquet python, des modules, etc

De ma compréhension des paquets Python et modules, cela signifie que je vais créer un foobar de dossier, les sous-répertoires et fichiers suivants (s'il vous plaît corriger si je me trompe)

foobar/ 
    __init__.py 
    alice/alice.py 
    bob/bob.py 
    charles/charles.py 
    david/david.py 

Le paquet doit être exécutable, afin qu'en plus de faire les modules alice, bob etc disponibles comme des 'bibliothèques', je dois aussi être en mesure d'utiliser foobar dans un script comme celui-ci:

python foobar --args = someargs

Question1:

Un paquet peut-il être rendu exécutable et utilisé dans un script comme je l'ai décrit ci-dessus?

Question 2

Les différents modules utiliseront le code que je veux factoriser dans une bibliothèque commune. Cela signifie-t-il créer un nouveau sous-répertoire 'foobar/common' et placer common.py dans ce dossier?

Question 3

Comment les modules foo importer le module commun? Est-ce que 'd'importation de foobar commun' ou est-ce que je ne peux pas l'utiliser puisque ces modules font partie du paquet?

Question 4

Je veux ajouter une logique quand le paquet foobar est utilisé dans un script (en supposant que cela peut être fait - je n'ai vu faire des modules)

Le code utilisé est quelque chose comme:

if __name__ == "__main__": 
    dosomething() 

où (dans quel fichier) devrais-je mettre cette logique?

Répondre

0

Un package peut être rendu exécutable et utilisé dans un script comme je l'ai décrit ci-dessus ?

Q1 et Q4. Oui, placez votre:

if __name__ == "__main__": 
    dosomething() 

dans foobar/__init__.py

Q2 Les différents modules utiliseront le code qui je veux factoriser dans une bibliothèque commune. Cela signifie-t-il créer un nouveau sous-répertoire 'foobar/common' et en plaçant common.py dans ce dossier?

Non, vous devez créer foobar/common.py, et non foobar/common/common.py.La même chose est vraie pour tous vos modules. Ainsi, la structure est à droite:

foobar/ 
    __init__.py 
    alice.py 
    bob.py 
    charles.py 
    common.py 
    david.py 

Faire ce que vous vous créez ensemble foobar, subpackage alice et le module alice en elle, etc. Ce n'est pas ce que vous voulez que je comprends. De plus, cela ne fonctionnera pas du tout, car un répertoire devient un paquet Python s'il contient __init__.py et que vous ne les avez pas créés dans vos sous-répertoires.

Q3 Comment les modules foo importer le module commun? Est-ce from foobar import common

C'est vrai. Vous pouvez également utiliser simplement import common mais cela peut provoquer un conflit si votre bibliothèque est utilisée dans un projet qui a son propre module/package nommé common. Je préfère donc utiliser des noms de modules complets.

+0

Merci - c'est tout ce que j'avais besoin de savoir (j'adore ce site!) – morpheous

+0

Pouvez-vous jeter un oeil à cette autre question trop pls, si vous avez le temps: http://stackoverflow.com/questions/2882308/ fraie-un-fil-en-python – morpheous

Questions connexes