将整个Python标准库编译成字节码是否可行?
Is it possible and feasible to compile the entire Python standard library to byte code?
有没有一种简单的方法可以将整个 Python 标准库预"compile" 为字节码?如果是这样,如果相应的 .pyc
文件已经存在(只要标准库未更新或修改),这是否也保证 Python 永远不会重新 "compiles" 文件?
背景:在应用程序服务器上,Python 有时会自发地进入损坏状态,表现如下:
C:\> python
Traceback (most recent call last):
File "C:\Python27\lib\site.py", line 563, in <module>
main()
File "C:\Python27\lib\site.py", line 552, in main
aliasmbcs()
File "C:\Python27\lib\site.py", line 478, in aliasmbcs
enc = locale.getdefaultlocale()[1]
AttributeError: 'module' object has no attribute 'getdefaultlocale'
这可以通过重新安装 Python 来解决。其他人告诉我他看到了损坏的(0 字节).pyc
文件,删除这些文件解决了问题。但是,我无法通过故意创建 0 字节 .pyc
文件来重现该问题。
我不喜欢属于标准库的文件 "compiled" 按需字节码,因为这发生在进程 运行 Python 和本机进程中可能意外崩溃的代码。我宁愿预编译所有 Python 代码,不管它是否有助于解决上述情况。
将系统 .pyc
文件设为 只读,即使对于管理员也是如此。这应该可以防止 Python 不必要地修改它们。
如果您在 Windows 上,请转到属性 → 安全 → 编辑,并拒绝所有组的所有权限。
有没有一种简单的方法可以将整个 Python 标准库预"compile" 为字节码?如果是这样,如果相应的 .pyc
文件已经存在(只要标准库未更新或修改),这是否也保证 Python 永远不会重新 "compiles" 文件?
背景:在应用程序服务器上,Python 有时会自发地进入损坏状态,表现如下:
C:\> python
Traceback (most recent call last):
File "C:\Python27\lib\site.py", line 563, in <module>
main()
File "C:\Python27\lib\site.py", line 552, in main
aliasmbcs()
File "C:\Python27\lib\site.py", line 478, in aliasmbcs
enc = locale.getdefaultlocale()[1]
AttributeError: 'module' object has no attribute 'getdefaultlocale'
这可以通过重新安装 Python 来解决。其他人告诉我他看到了损坏的(0 字节).pyc
文件,删除这些文件解决了问题。但是,我无法通过故意创建 0 字节 .pyc
文件来重现该问题。
我不喜欢属于标准库的文件 "compiled" 按需字节码,因为这发生在进程 运行 Python 和本机进程中可能意外崩溃的代码。我宁愿预编译所有 Python 代码,不管它是否有助于解决上述情况。
将系统 .pyc
文件设为 只读,即使对于管理员也是如此。这应该可以防止 Python 不必要地修改它们。
如果您在 Windows 上,请转到属性 → 安全 → 编辑,并拒绝所有组的所有权限。