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?
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
Vous devez vous connecter pour publier un commentaire.
Ne pas déconner avec
execfile
ousys.path.append
moins qu'il existe une très bonne raison pour cela. Plutôt, il suffit de les disposer votre code en bon paquets python et de faire de l'importation comme vous le feriez pour tout autre bibliothèque.Si votre
mymodules
est en fait une partie d'un grand projet, puis définissez votre colis:Et puis vous pouvez importer
mymodules
à partir de n'importe où dans votre code comme ceci:Si votre
mymodules
code est utilisé par un certain nombre de séparer et de projets distincts, alors il suffit de faire en un paquet dans son propre droit et de l'installer dans n'importe quel environnement, il doit être utilisé dans.Donc cela peut être le cas d'un "dieu de la raison", après tout...
Ma suggestion serait de faire de votre "myproject" portable sans exiger quelque chose, mais un paquet standard d'installation.
OriginalL'auteur Mark Gemmill