如何避免.pyc文件?
我可以在不生成编译后的.pyc文件的情况下运行python解释器吗?
从“Python 2.6的新增功能 - 解释器更改”开始:
通过将-B开关提供给Python解释器,或者在运行解释器之前设置PYTHONDONTWRITEBYTECODE环境变量,现在可以防止Python编写.pyc或.pyo文件。 该设置可作为sys.dont_write_bytecode
变量提供给Python程序,Python代码可以更改该值以修改解释器的行为。
更新2010-11-27:Python 3.2通过引入特殊的__pycache__
子文件夹来解决使用.pyc
文件__pycache__
源文件夹的问题,请参阅Python 3.2中的新增功能 - PYC存储库目录。
import sys
sys.dont_write_bytecode = True
实际上有一种方法可以在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库:
ZIP档案中可能存在任何文件,但只有文件.py和.py [co]可用于导入。 动态模块(.pyd,.so)的ZIP导入是不允许的。 请注意,如果存档文件仅包含.py文件,则Python不会尝试通过添加相应的.pyc或.pyo文件来修改存档文件,这意味着如果ZIP存档文件不包含.pyc文件,则导入可能会很慢。
因此,你所要做的就是压缩文件,将zip文件添加到你的sys.path然后导入它们。
如果你正在为UNIX编译这个脚本,你也可以考虑使用这个配方来打包你的脚本:unix zip可执行文件,但是请注意,如果你打算使用stdin或者从sys.args中读取任何东西,你可能需要调整它(它可以是没有太多的麻烦)。
根据我的经验,性能不会因此受到太多影响,但在以这种方式导入任何超大型模块之前,您应该三思而后行。
链接地址: http://www.djcxy.com/p/24139.html