Python脚本是否有可能md5散列自身?

sta*_*yer 1 python hash

我想每次运行时都能自己哈希.这是否可以在不必提供脚本路径的情况下实现?我可以看到两种方法来做到这一点.第一种方法是对源Python文本文件进行哈希处理.第二种方法是散列编译的字节码.

我认为自己会选择2,因此提出了其他几个问题:

  1. 脚本可以确定脚本中编译的字节码的位置吗?
  2. 我会在一个单独的问题中问这个问题.

Mar*_*ers 7

python脚本可以找出自己的路径:

import os

path = os.path.abspath(__file__)
Run Code Online (Sandbox Code Playgroud)

之后,您可以打开源文件并运行它hashlib.md5.

一个脚本文件没有编译字节码文件; 只有模块呢.

请注意,在Python 2中,__file__路径使用实际加载的文件的扩展名; 对于模块,这是.pyc.pyo仅当存在可以重用的缓存字节码文件时.这是.pyPython是否有编译字节代码,或者是因为没有字节码文件存在,或者因为字节码文件已过时.

你必须考虑到你的代码是用命令行开关调用的,它改变了Python加载的字节码; 如果给出了一个-O或者一个-OO开关,或者PYTHONOPTIMIZE设置了环境标志,那么Python将加载或编译成一个.pyo文件.