使用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.
原文链接:https://www.f2er.com/python/533275.htmlPyPy2的当前状态反映了PyPy开发人员对CPython细节的烦恼.在PyPy的开发过程中,它经常咬我们,以至于无法忽视.我们的观点是,当您通常在开发任何东西时,删除或重命名.py文件后,如果忘记修复或摆脱其他文件中的import语句,则希望看到崩溃.取而代之的是,您会看到导入仍然有效,并且针对这些不相关文件的所有测试仍然通过,因为它们仍然使用相同的旧逻辑.因此,您认为已经完成并检入了版本控制系统中的文件-但当然是错误的.
出于这个原因,我们尽早决定CPython的这种行为对我们来说更像是一个错误,并且默认情况下没有在PyPy2中重现它.如果确实需要此行为,则需要通过传递–lonepycfile标志来重新转换PyPy2.
PyPy3后来出现了,它带有自己的importlib系统,使用纯Python,我们没有接触过.