python modules locaux

J'ai plusieurs répertoires de projet et que vous voulez avoir bibliothèques de modules spécifiques. Par exemple, je pourrais avoir une structure de répertoire comme tel:

myproject/
  mymodules/
    __init__.py
    myfunctions.py
  myreports/
    mycode.py

En supposant qu'il existe une fonction appelée add dans myfunctions.py, je peux l'appeler à partir d' mycode.py avec la plus naïve de routine:

execfile('../mymodules/myfunctions.py')
add(1,2)

Mais pour être plus sophistiqué à ce sujet, je peux aussi ne

import sys
sys.path.append('../mymodules')
import myfunctions

myfunctions.add(1,2)

Est-ce le plus idiomatique façon de le faire? Il y a aussi de le mentionner sur la modification de la PYTHONPATH (os.environ['PYTHONPATH']?), mais est-ce ou d'autres choses que je devrais regarder?

Aussi, j'ai vu import les déclarations contenues à l'intérieur de la classe des énoncés, et dans d'autres cas, définies dans la partie supérieure d'un fichier Python qui contient la définition de la classe. Est-il un droit ou un moyen privilégié pour ce faire?

Par votre méthode plus sophistiquée, vous êtes en train de modifier le PYTHONPATH, donc, à mon humble avis, c'est la meilleure méthode
déplacer mycode.py directement dans myproject
Iyer, vous avez raison... je ne sais pas s'il a été préféré à augmenter la PYTHONPATH variable directoy (ce qui est techniquement différent de la recherche de la trajectoire définie dans le sys.path?). Comme dans os.environ[PYTHONPATH] += ':../mymodules' ou quelque chose.
oui, ce serait plus logique, mais mes projets sont assez grandes et ont de nombreux autres (imbriqué) sous-répertoires qui sont tous destinés à l'appel mymodules.

OriginalL'auteur hatmatrix | 2011-10-11