0

从 pth 文件执行的导入语句似乎执行得很好。但我似乎无法访问以这种方式导入的任何模块。

这是什么法术?

4

1 回答 1

3

从您的评论中,我猜您会因为混淆.pth-files 的用途而收到某些模块的 NameError 异常。

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)

另一个常见的情况是使用.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-files 不存在使模块名称出现在您的代码中。要 import some_module,请在要使用它的每个模块的顶部添加:

import some_module
于 2012-12-12T17:15:29.380 回答