导入的第一件事是sitecustomize和usercustomize模块; 您可以替换sys.path为记录所有更改的自定义列表实现.
首先,找到放置usercustomize或sitecustomize模块的位置; 该site模块可以告诉你在什么地方,第一:
python -m site --user-site
Run Code Online (Sandbox Code Playgroud)
如果该目录尚不存在,请创建它并在其中放置一个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(VerboseSysPath, self).insert(*args)
def append(self, *args):
self.croak('append', args)
return super(VerboseSysPath, self).append(*args)
def extend(self, *args):
self.croak('extend', args)
return super(VerboseSysPath, self).extend(*args)
def pop(self, *args):
self.croak('pop', args)
return super(VerboseSysPath, self).pop(*args)
def remove(self, *args):
self.croak('remove', args)
return super(VerboseSysPath, self).pop(*args)
def __delitem__(self, *args):
self.croak('__delitem__', args)
return super(VerboseSysPath, self).__delitem__(*args)
def __setitem__(self, *args):
self.croak('__setitem__', args)
return super(VerboseSysPath, self).__setitem__(*args)
def __setslice__(self, *args):
self.croak('__setslice__', args)
return super(VerboseSysPath, self).__setslice__(*args)
sys.path = VerboseSysPath(sys.path)
Run Code Online (Sandbox Code Playgroud)
现在这将抱怨改变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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |