【发布时间】:2018-10-16 04:49:41
【问题描述】:
深入阅读Python site.py documentation,我发现这是关于.pth 文件的:
空白行和以# 开头的行被跳过。执行以 import 开头的行(后跟空格或制表符)。
这两句话很容易漏掉。它们位于长段的末尾,这意味着扫描的眼睛很容易忽略它们。即使在我积极寻找它们时,我也想念它们。
代码执行示例来自python3.6/site-packages/virtualenvwrapper-4.8.2-py2.7-nspkg.pth:
import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('virtualenvwrapper',));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and sys.modules.setdefault('virtualenvwrapper', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('virtualenvwrapper', [os.path.dirname(p)])));m = m or sys.modules.setdefault('virtualenvwrapper', types.ModuleType('virtualenvwrapper'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
允许在.pth 文件中执行任意代码的目的是什么?
鉴于任意代码执行可能产生广泛的负面影响,有关检查或保护 .pth 文件的最佳做法是什么?
【问题讨论】:
标签: python python-3.x python-2.7 sys.path