从pth文件执行的import语句似乎执行得很好。但我似乎无法访问以这种方式导入的任何模块。
这是什么魔法?
发布于 2012-12-13 01:15:29
从你的评论中,我猜你得到了一些模块的NameError异常,因为对.pth-files的用途感到困惑。
pth代表path。其目的是将路径添加到sys.path (pythonpath - Python在导入过程中用来查找模块的路径)。参见site module documentation。
以import开头的行可以包含任何代码,但通常它们会修改sys.path。例如,setuptools machinery:
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实现"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-files不是用来让模块名称出现在代码中的。要导入some_module,请在要使用它的每个模块的顶部添加:
import some_modulehttps://stackoverflow.com/questions/13842178
复制相似问题