【发布时间】:2019-04-03 09:09:59
【问题描述】:
使用 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 文件?
【问题讨论】:
-
PyPy 是一个 JIT 编译器,它在代码加载和运行时进行编译/优化。为此,我认为它不会读取 *.pyc 文件,因为这些文件是专门为 CPython 缓存的。
-
@Samat Jain:如上所述,我的测试包括 PyPy3,它可以运行纯 pyc 包而没有任何缺陷。因此,您的答案不可能是 JIT 通常 a 无法做到这一点。此外,PyPy 会自行将
*.py源文件编译为*.pyc文件。如果 PyPy 不使用*.pyc文件,它会编译它们吗?