首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sys.path的调试修改

sys.path的调试修改
EN

Stack Overflow用户
提问于 2015-02-10 13:28:22
回答 2查看 1K关注 0票数 4

有些库似乎修改了我的sys.path,尽管我不想改变它。

如何找到修改sys.path的python代码行?

相关

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-10 13:44:06

首先导入的东西之一是sitecustomizeusercustomize模块;您可以用一个自定义列表实现替换sys.path,该实现记录正在进行的所有更改。

首先,找到放置usercustomizesitecustomize模块的位置; module可以告诉您放置第一个模块的位置:

代码语言:javascript
复制
python -m site --user-site

如果该目录尚不存在,请创建该目录,并在其中放置一个usercustomize.py

代码语言:javascript
复制
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模块中:

代码语言:javascript
复制
$ cat test.py 
import sys

sys.path.append('')
$ bin/python test.py 
sys.path.append('',) from test.py:3
票数 8
EN

Stack Overflow用户

发布于 2016-07-15 20:03:13

使用python -S启动python会导致python不加载site.py,因此从python第一次启动时起保留其默认值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28432910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档