gpt4 book ai didi

Python 2.x 和 3.x 无源 .pyc 部署

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:10 25 4
gpt4 key购买 nike

在 Python 2.x 中 .pyc文件存储在与源相同的目录中 .py文件。在 Python 3.2+ 中 .pyc文件存储在 __pycache__ 中目录。

如果代码编写得当,解释器和 .pyc 都可以运行它文件可以共存。但是一旦我想摆脱源代码,我就遇到了一个问题:Python 2.x 解释器仍然导入正确的 .pyc。文件,但 Python 3.2+ 解释器拒绝导入其编译的 .pyc来自 __pycache__目录并尝试导入 .pyc来自先前版本的文件并因魔数(Magic Number)不匹配而失败。

是否可以在不公开源代码的情况下让两个 Python 解释器都满意?

[更新]

我试过这个(它看起来像一个解决方案):

  1. 照常部署资源
  2. 使用 Python 2.x 编译器编译每个 .py 文件(这将在同一目录中生成 .pyc 文件)
  3. 使用 Python 3.2+ 编译器编译每个 .py 文件(这将在 .pyc 目录中生成 __pycache__ 文件)
  4. 清除 .py文件内容,同时保留其修改日期

Python 2 解释器很高兴。 Python 3 解释器怀疑源代码被修改并重新编译修改后的源代码。重新编译的原因是什么?它是否也存储源文件大小?校验和?

最佳答案

如果没有 .py 文件或 __pycache__ 目录,Python 3 将在同一位置使用 .pyc 文件。请注意,Python 3 explicitly refuses to load __pycache__ files if the source file is missing , 对于无源发行版,只有 legacy locations are supported .

compileall module and command出于这个原因,可以被告知在同一目录中生成 .pyc 文件:

python -m compileall -b

但要考虑到字节缓存文件仍然是特定于 Python 版本的。您必须根据 Python 字节缓存魔数(Magic Number)(通常随每个 .x 版本而变化)生成和分发缓存文件。

所以不,您不能拥有适用于多个 Python 版本的 .pyc 无源代码发行版。在 Python 3.2 之前,情况从来都不是这样,Python 2.6、2.7、3.0 和 3.1 .pyc bytecache 文件每个都有一个唯一的 bytecache 版本号,如果你给这个“魔数(Magic Number)”Python 会提示它是另一个版本的 .pyc 文件。

关于Python 2.x 和 3.x 无源 .pyc 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56557001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com