同じディレクトリに Python モジュール a.py と b.py があります。a.py が別のディレクトリからインポートされたか、直接実行された可能性がある場合、a.py から b.py を確実にインポートするにはどうすればよいですか? このモジュールは配布されるため、単一のパスをハードコードすることはできません。
__file__
、 sys.path 、 os.chdir で遊んでいますが、面倒です。また__file__
、いつでも利用できるわけではありません。
同じディレクトリに Python モジュール a.py と b.py があります。a.py が別のディレクトリからインポートされたか、直接実行された可能性がある場合、a.py から b.py を確実にインポートするにはどうすればよいですか? このモジュールは配布されるため、単一のパスをハードコードすることはできません。
__file__
、 sys.path 、 os.chdir で遊んでいますが、面倒です。また__file__
、いつでも利用できるわけではありません。
実際に__file__
は、インポートされたモジュールで使用できますが、.py/.pyc ファイルからインポートされた場合のみです。モジュールが組み込まれている場合は使用できません。例:
>>> import sys, os
>>> hasattr(os, '__file__')
True
>>> hasattr(sys, '__file__')
False
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
両方を含むディレクトリをPythonパスに配置します...またはその逆。