0

p番目のファイルから実行されたインポートステートメントは正常に実行されているようです。しかし、この方法でインポートされたモジュールにはアクセスできないようです。

この魔術は何ですか?

4

1 に答える 1

3

あなたのコメントから、-filesの目的についての混乱のために、いくつかのモジュールでNameError例外が発生していると推測しています.pth

pthの略ですpath。目的は、パスを追加することですsys.path(pythonpath-Pythonがインポート中にモジュールを見つけるために使用するパス)。siteモジュールのドキュメントを参照してください。

で始まる行にimportは任意のコードを含めることができますが、通常は変更されsys.pathます。たとえば、setuptools機械:

import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

もう1つの一般的なケースは、.pth-filesを使用して「名前空間」パッケージを実装する場合です。

import sys,types,os; p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('zope',)); ie = os.path.exists(os.path.join(p,'__init__.py')); m = not ie and sys.modules.setdefault('zope',types.ModuleType('zope')); mp = (m or []) and m.__dict__.setdefault('__path__',[]); (p not in mp) and mp.append(p)

.pth-モジュール名をコードに表示するためのファイルはありません。インポートsome_moduleするには、使用する各モジュールの上部に次を追加します。

import some_module
于 2012-12-12T17:15:29.380 に答える