gpt4 book ai didi

python - 如何使用仅包含 pyc 文件的 PyPy2 运行 Python 包?

转载 作者:太空狗 更新时间:2023-10-30 02:51:32 26 4
gpt4 key购买 nike

使用 CPython2,我可以使用 python.exe -c "import mypackage" 编译我的 Python 源代码包。在递归删除所有 *.py 文件后,我可以简单地使用 import mypackage 导入它并像往常一样使用它。

使用 CPython3,我可以使用 python.exe -m compileall -b "full/path/to/mypackage" 编译我的 Python 源代码 pyckage。在递归删除所有 *.py 文件后,我可以使用 import mypackage 简单地导入它。并像往常一样使用它。

这甚至可以使用 PyPy3 以完全相同的方式完成。

令人惊讶的是,当使用 PyPy2 时,这不起作用!

编译并删除源文件后,我得到以下输出:

Python 2.7.13 (9112c8071614, Feb 06 2019, 23:10:08)
[PyPy 7.0.0 with MSC v.1500 32 bit] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>> import mypackage
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named mypackage
>>>>

这个问题有解决办法吗?

如何让 PyPy2 像 CPython2 一样只查看 *.pyc 文件?

最佳答案

如您所见,PyPy2 拒绝单独加载 .pyc文件,即 .pyc删除 .py 后文件仍然存在文件。相反,PyPy3 的行为类似于 CPython。

PyPy2 的当前状态反射(reflect)了 PyPy 开发人员对 CPython 的这个细节的烦恼。在 PyPy 的开发过程中,它常常让我们无法忽视。在我们看来,当您正常开发任何东西时,在删除或重命名 .py 文件后,如果您忘记修复或删除其他文件中的导入语句,您希望看到崩溃。取而代之的是,您看到导入仍在工作,并且这些不相关文件的所有测试仍在通过,因为它们仍在使用相同的旧逻辑。所以你认为你已经完成并 checkin 版本控制系统中的文件---当然这是错误的。

出于这个原因,我们很早就决定 CPython 的这种行为对我们来说更像是一个错误,并且默认情况下不会在 PyPy2 中重现它。如果你真的需要这种行为,你需要通过传递 --lonepycfile 来重新翻译 PyPy2。旗帜。

PyPy3 后来出现了,它有自己的 importlib系统,纯 Python,我们没有接触。

关于python - 如何使用仅包含 pyc 文件的 PyPy2 运行 Python 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55491314/

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