从pth文件执行的import语句似乎执行正常。但我似乎无法访问以这种方式导入的任何模块。
这是什么巫术?
答案 0 :(得分:3)
从您的评论中我猜测,由于对.pth
- 文件的目的混淆,您正在获取某些模块的NameError异常。
pth
代表path
。目的是向sys.path
添加路径(pythonpath - Python在导入期间用于查找模块的路径)。请参阅site
module documentation。
以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
- 文件用于实现"namespace" packages:
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