我希望能够在每次运行时自行散列。这可能无需提供脚本路径吗?我可以看到两种方法来做到这一点。第一种方法是散列源 Python 文本文件。 第二种方式是对编译后的字节码进行哈希处理。
我认为自己会选择选项 2,因此会引发其他几个问题:
- 脚本能否确定其编译后的字节码在脚本中的位置?
- 我会在一个单独的问题中提出这个问题。
请您参考如下方法:
一个 python 脚本可以找出它自己的路径:
import os
path = os.path.abspath(__file__)
之后您可以打开源文件并通过hashlib.md5运行它。
一个脚本文件没有编译好的字节码文件;只有模块可以。
请注意,在 Python 2 中,__file__ 路径使用实际加载的文件的扩展名;对于模块,这是 .pyc 或 .pyo 只有当有一个缓存的字节码文件准备好被重用时。如果 Python 必须编译字节码,则它是 .py,要么是因为不存在字节码文件,要么是因为字节码文件已过时。
您必须考虑到您的代码是通过命令行开关调用的,这些开关改变了 Python 加载的字节码;如果给出了 -O 或 -OO 开关,或者设置了 PYTHONOPTIMIZE 环境标志,Python 将加载或编译为 .pyo 文件。
