如何使用仅由pyc文件组成的PyPy2运行Python包?

前端之家收集整理的这篇文章主要介绍了如何使用仅由pyc文件组成的PyPy2运行Python包? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

使用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文件,即删除.py文件后仍然存在的.pyc文件. PyPy3的行为类似于CPython.

PyPy2的当前状态反映了PyPy开发人员对CPython细节的烦恼.在PyPy的开发过程中,它经常咬我们,以至于无法忽视.我们的观点是,当您通常在开发任何东西时,删除重命名.py文件后,如果忘记修复或摆脱其他文件中的import语句,则希望看到崩溃.取而代之的是,您会看到导入仍然有效,并且针对这些不相关文件的所有测试仍然通过,因为它们仍然使用相同的旧逻辑.因此,您认为已经完成并检入了版本控制系统中的文件-但当然是错误的.

出于这个原因,我们尽早决定CPython的这种行为对我们来说更像是一个错误,并且默认情况下没有在PyPy2中重现它.如果确实需要此行为,则需要通过传递–lonepycfile标志来重新转换PyPy2.

PyPy3后来出现了,它带有自己的importlib系统,使用纯Python,我们没有接触过.

原文链接:https://www.f2er.com/python/533275.html

猜你在找的Python相关文章