2009-06-19 5 views
0

J'ai les modules Python a.py et b.py dans le même répertoire. Comment importer de manière fiable b.py à partir d'a.py, étant donné que a.py peut avoir été importé d'un autre répertoire ou exécuté directement? Ce module sera distribué donc je ne peux pas coder un seul chemin.python importation de modules relatifs

J'ai joué avec __file__, sys.path et os.chdir, mais ça fait mal. Et __file__ n'est pas toujours disponible.

grâce

Répondre

-1

Mettre le répertoire qui contient à la fois dans votre chemin python ... ou vice versa.

+0

c'est ce que j'essaie de faire avec sys.path ... – hoju

6

En fait, __file__ est disponible pour un module importé, mais seulement si elle a été importée d'un fichier .py/.pyc. Il ne sera pas disponible si le module est construit. Par exemple:

>>> import sys, os 
>>> hasattr(os, '__file__') 
True 
>>> hasattr(sys, '__file__') 
False 
1

L'utilisation du module inspect fera les modules BUILTIN plus évidente:

>>> import os 
>>> import sys 
>>> inspect.getfile(os) 
'/usr/local/lib/python2.6/os.pyc' 
>>> inspect.getfile(sys) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.6/inspect.py", line 407, in getfile 
    raise TypeError('arg is a built-in module') 
TypeError: arg is a built-in module 
Questions connexes