【发布时间】:2015-11-29 04:05:31
【问题描述】:
在Question 2918898,用户讨论了如何避免缓存,因为 模块正在发生变化,解决方案侧重于重新加载。我的问题是 有点不同;我想首先避免缓存。
我的应用程序在 Un*x 上运行并位于 /usr/local。它导入一个
包含此应用程序和另一个应用程序使用的一些共享代码的模块。
它通常以普通用户身份运行,Python 不会缓存
模块在这种情况下,因为它没有写权限
系统目录。到目前为止一切顺利。
但是,有时我需要以超级用户身份运行应用程序,然后 它确实具有写权限,并且确实缓存了它,留下了难看的东西 系统目录中的足迹。不想。
所以...任何方式告诉 CPython 3.2(或更高版本,我愿意升级) 不缓存模块?或者其他解决问题的方法? 更改目录权限不起作用; root 还能写, root 是无所不能的。
我查看了PEP 3147,但没有看到阻止缓存的方法。
我不记得除了import 之外的任何导入代码的方法。我想我
可以读取一个简单的文本文件并 exec 它,但这似乎不优雅
并且容易出错。
run-as-root 是通过使用sudo 在一个
shell 脚本,我可以让 shell 脚本在
运行,但我希望更优雅的东西不会改变
目录的最后修改时间戳。
根据 Wander Nauta 的回答实施的解决方案:
由于我将可执行文件作为纯文件名而不是python executablename 运行,因此我使用了环境变量。首先,
sudoers 需要更改文件以允许设置环境
变量:
tom ALL=(ALL) SETENV: NOPASSWD: /usr/local/bkup/bin/mkbkup
那么,调用需要包含变量:
/usr/bin/sudo PYTHONDONTWRITEBYTECODE=true /usr/local/bkup/bin/mkbkup "$@"
【问题讨论】:
标签: unix python-3.x sudo