Python импортирует относительные модули - PullRequest
0 голосов
/ 19 июня 2009

У меня есть модули Python a.py и b.py в одном каталоге. Как можно надежно импортировать b.py из a.py, если, возможно, a.py был импортирован из другого каталога или выполнен напрямую? Этот модуль будет распространяться, поэтому я не могу жестко закодировать один путь.

Я играл с __file__, sys.path и os.chdir, но это кажется грязным. И __file__ не всегда доступен.

спасибо

Ответы [ 3 ]

6 голосов
/ 19 июня 2009

На самом деле, __file__ доступно для импортированного модуля, но только если он был импортирован из файла .py / .pyc. Он не будет доступен, если модуль встроен. Например:

>>> import sys, os
>>> hasattr(os, '__file__')
True
>>> hasattr(sys, '__file__')
False
1 голос
/ 19 июня 2009

Использование модуля inspect сделает встроенные модули более понятными:

>>> 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
0 голосов
/ 24 июня 2009

Поместите каталог, который содержит оба в вашем пути Python ... или наоборот.

...