我可以在不生成编译的.pyc文件的情况下运行python解释器吗?
发布于 2008-09-30 19:38:02
来自"What’s New in Python 2.6 - Interpreter Changes"
现在可以通过向
解释器提供-B开关,或者在运行解释器之前设置PYTHONDONTWRITEBYTECODE环境变量来阻止Python写入.pyc或.pyo文件。此设置可作为
sys.dont_write_bytecode变量提供给Python程序,Python代码可以更改该值以修改解释器的行为。
更新2010-11-27: Python3.2通过引入一个特殊的.pyc子文件夹,解决了源文件夹中.pyc文件混乱的问题,请参阅What's New in Python 3.2 - PYC Repository Directories。
注意:默认的行为是生成字节码,这是出于“性能”的原因(有关python2的更多信息和python3的更多信息,请参阅此处)。
PYTHONDONTWRITEBYTECODE=1的性能)。发布于 2012-03-05 13:59:48
import sys
sys.dont_write_bytecode = True发布于 2008-09-30 19:44:05
实际上,在Python 2.3+中有一种方法可以做到这一点,但它有点晦涩难懂。我不知道你是否意识到这一点,但你可以这样做:
$ unzip -l /tmp/example.zip
Archive: /tmp/example.zip
Length Date Time Name
-------- ---- ---- ----
8467 11-26-02 22:30 jwzthreading.py
-------- -------
8467 1 file
$ ./python
Python 2.3 (#1, Aug 1 2003, 19:54:32)
>>> import sys
>>> sys.path.insert(0, '/tmp/example.zip') # Add .zip file to front of path
>>> import jwzthreading
>>> jwzthreading.__file__
'/tmp/example.zip/jwzthreading.py'根据zipimport库:
压缩包中可能存在任何文件,但只有.py和.pyco文件可供导入。不允许动态模块(.pyd,.so)的ZIP导入。请注意,如果归档文件只包含.py文件,Python将不会尝试通过添加相应的.pyc或.pyo文件来修改归档文件,这意味着如果ZIP归档文件不包含.pyc文件,则导入可能会相当慢。
因此,您所要做的就是压缩文件,将压缩文件添加到sys.path中,然后导入它们。
如果您正在为UNIX构建此脚本,则还可以考虑使用以下方法打包脚本:unix zip executable,但请注意,如果您计划使用标准输入或从sys.args读取任何内容,则可能需要对此进行调整(这可以很容易地完成)。
根据我的经验,性能不会因此受到太大影响,但在以这种方式导入任何非常大的模块之前,您应该三思而后行。
https://stackoverflow.com/questions/154443
复制相似问题