python解释器的-s
参数阻止sys.path
拥有用户目录:
-s Don't add user site directory to sys.path.
设置PYTHONNOUSERSITE
环境变量是实现相同结果的另一种方法。请注意,在PYTHONPATH
中设置一个用户站点目录,然后用-s
调用脚本将覆盖“用户站点”删除。在
如果我不能控制如何调用python脚本,有没有一种简单的方法可以删除python脚本或模块中的用户目录?我可以重复一遍系统路径并删除以os.environ["HOME"]
开头的所有条目。是这样吗?我是否会错过或者删除不该删除的目录(例如,如果有人在他们的主目录中安装了python,甚至可能安装在~/.local/…)中呢。。。什么地方?HOME
env var是正确的选择吗?我看不到任何sys.path.usersite
可以用来为路径清理工作设定种子(但是请参见update1)。在
有没有一种方法比在所有python脚本的顶部添加迭代blob更容易擦洗用户站点目录?在
像这样的shebang线实现了这一点:
#!/usr/local/bin/python -s
但是如果不想硬编码到python解释器的路径,可以使用以下习惯用法:
^{pr2}$但是,在上面添加参数(比如-s
)是行不通的,因为大多数unix系统上解释shebang行的方式(请参见update2):
env: python -s: No such file or directory
这个问题有两个微妙的变化:
(1)当您的脚本不是用-s
调用时,如何模拟-s
所做的事情(包括允许用户站点目录位于PYTHONPATH
中)时?也许是最好的方法(?)对于这种变化:
#!/bin/sh
exec python -s << eof
... python code...
eof
编辑如果要传递参数,上述操作将失败。这可能会更好:
#!/bin/sh
exec python -s - "$@" << "eof"
... python code...
eof
注意引用的“eof”以避免shell尝试在here文档主体中执行扩展和子语句。在
附带说明:如果我需要python -S
功能(没有等效的环境变量knobl)或其他python选项参数,这也会有帮助。在
(2)如何模拟-s
而不考虑PYTHONPATH
的(即删除用户站点目录,即使它们在PYTHONPATH中)?在
我想我希望的是指向用户site dir的sys变量。但我找不到。在
更新1:感谢Blender的注释-变量位于站点模块中:site.USER_SITE
。所以你可以重复系统路径正在查找根目录中的条目(用户站点中可能有.egg文件,要模拟-s,您还需要删除这些文件)。在
更新2:使用env -S
是另一种解决方案。它允许您将参数传递给env(1)
在shebang行中生成的命令。FreeBSD已经有-S多年了(从6.0开始)。使用coreutils的Linux系统(大多数)从coreutils 8.301开始就有了。Linux发行版需要一段时间才能获得coreutils版本,因此依赖它进行可移植脚本编写可能还不够谨慎(现在是2019年)。在
#!/usr/bin/env -S python -s
另请参见this旧的类似线程。在
目前没有回答
相关问题 更多 >
编程相关推荐