发布于 2015-02-10 13:44:06
首先导入的东西之一是sitecustomize和usercustomize模块;您可以用一个自定义列表实现替换sys.path,该实现记录正在进行的所有更改。
首先,找到放置usercustomize或sitecustomize模块的位置; module可以告诉您放置第一个模块的位置:
python -m site --user-site如果该目录尚不存在,请创建该目录,并在其中放置一个usercustomize.py:
import sys
class VerboseSysPath(list):
def croak(self, action, args):
frame = sys._getframe(2)
print('sys.path.{}{} from {}:{}'.format(
action, args, frame.f_code.co_filename, frame.f_lineno))
def insert(self, *args):
self.croak('insert', args)
return super().insert(*args)
def append(self, *args):
self.croak('append', args)
return super().append(*args)
def extend(self, *args):
self.croak('extend', args)
return super().extend(*args)
def pop(self, *args):
self.croak('pop', args)
return super().pop(*args)
def remove(self, *args):
self.croak('remove', args)
return super().remove(*args)
def __delitem__(self, *args):
self.croak('__delitem__', args)
return super().__delitem__(*args)
def __setitem__(self, *args):
self.croak('__setitem__', args)
return super().__setitem__(*args)
sys.path = VerboseSysPath(sys.path)现在,这将抱怨所有更改sys.path列表的尝试。
演示,上面的内容放在site-packages/sitecustomize.py或`python -m site --user-site`/usercustomize.py模块中:
$ cat test.py
import sys
sys.path.append('')
$ bin/python test.py
sys.path.append('',) from test.py:3发布于 2016-07-15 20:03:13
使用python -S启动python会导致python不加载site.py,因此从python第一次启动时起保留其默认值。
https://stackoverflow.com/questions/28432910
复制相似问题