aba*_*bak 2 python compatibility python-2.x python-3.x
在 Python 2.x 中,.pyc文件存储在与源.py文件相同的目录中。在 Python 3.2+ 中,.pyc文件存储在__pycache__目录中。
如果代码编写正确,它可以由两个解释器运行,并且.pyc文件可以很好地共存。但一旦我想摆脱源代码,我就会遇到一个问题:Python 2.x 解释器仍然导入正确的.pyc文件,但 Python 3.2+ 解释器拒绝导入.pyc从__pycache__目录编译的文件,并尝试.pyc从之前的版本由于幻数不匹配而失败。
是否有可能在不暴露源代码的情况下让两个Python解释器都满意?
[更新]
我尝试了这个(看起来像是一个解决方案):
.pyc使用 Python 2.x 编译器编译每个 .py 文件(这将在同一目录中生成文件).pyc在目录中生成文件__pycache__).py文件内容,同时保留其修改日期Python 2 解释器很高兴。Python 3解释器怀疑源代码被修改并重新编译修改后的源代码。重新编译的原因是什么?它也存储源文件大小吗?校验和?
.pyc如果没有.py文件或目录, Python 3 将使用同一位置的文件__pycache__。请注意,如果源文件丢失, Python 3明确拒绝加载__pycache__文件,对于无源发行版,仅支持旧位置。
出于这个原因,可以告诉模块compileall和命令.pyc在同一目录中生成文件:
python -m compileall -b
Run Code Online (Sandbox Code Playgroud)
但请考虑到字节缓存文件仍然是特定于 Python 版本的。您必须根据 Python 字节缓存幻数(通常随每个 .x 版本而变化)生成和分发缓存文件。
所以不,你不能拥有可.pyc在多个 Python 版本上运行的无源发行版。在 Python 3.2 之前也从来没有出现过这种情况,Python 2.6、2.7、3.0 和 3.1.pyc字节缓存文件每个都有一个唯一的字节缓存版本号,如果你给它一个.pyc来自其他版本的文件,Python 会抱怨这个“幻数”。
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |