0
某些圖書館確實以我不想要的方式更改了我的sys.path
。sys.path在哪裏被替換?
但我找不到它。受影響的virtualenv安裝了很多庫。
我替換爲自己的類,它改變了修改sys.path中,但是這並沒有幫助,因爲代碼似乎改變sys.path
這樣的:
sys.path= [...] + sys.path
我如何才能找到「邪惡」的代碼線和它的堆棧跟蹤?
相關
某些圖書館確實以我不想要的方式更改了我的sys.path
。sys.path在哪裏被替換?
但我找不到它。受影響的virtualenv安裝了很多庫。
我替換爲自己的類,它改變了修改sys.path中,但是這並沒有幫助,因爲代碼似乎改變sys.path
這樣的:
sys.path= [...] + sys.path
我如何才能找到「邪惡」的代碼線和它的堆棧跟蹤?
相關
我發現邪惡的代碼行這樣。
我改變sys.globals [ 'SYS'〕中sitecustomize.py:
# sitecustomize.py
import sys
class AttributeIsReadonly(ValueError):
pass
class MakeModuleAttributesReadonly(object):
def __init__(self, module, readonly_attributes):
self.module=module
self.readonly_attributes=readonly_attributes
def __setattr__(self, item, value):
if item in ['module', 'readonly_attributes']:
return super(MakeModuleAttributesReadonly, self).__setattr__(item, value)
if item in self.readonly_attributes:
raise AttributeIsReadonly('Access on attribute %r is readonly' % item)
return setattr(self.module, item, value)
def __getattr__(self, item):
return getattr(self.module, item)
sys.modules['sys']=MakeModuleAttributesReadonly(sys, ['path'])
#import sys
#sys.path=sys.path # this will raise the above AttributeIsReadonly
它提高AttributeIsReadonly
和我看到的代碼線和堆棧跟蹤。
爲什麼你不加上這個作爲現有問題的替代答案? – jonrsharpe
由於在目前的問題sys.path沒有得到**修改**。這是一個不同的問題。它有關但不相同。 – guettli
但是當然在同一個地方有兩個答案會對其他用戶更有幫助嗎?修改和替換列表在技術上是不同的,但是你正在解決同樣的基本問題。請注意,你也可以通過在'VerboseSysPath'中實現'__add__'來解決這個問題。 – jonrsharpe