如何避免 .pyc 文件?
我可以在运行Python解释器的时候,不生成编译后的.pyc文件吗?
10 个回答
其实在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格式,把这个ZIP文件添加到你的sys.path中,然后就可以导入它们了。
如果你是在为UNIX系统构建这个,你也可以考虑使用这个方法来打包你的脚本:unix zip executable,不过要注意,如果你打算使用标准输入或者从sys.args读取内容,可能需要稍微调整一下(其实不太麻烦就能做到)。
根据我的经验,这样做性能影响不大,但在导入一些非常大的模块时,你还是要三思而后行。
这段代码是一个示例,展示了如何在编程中使用某些功能。它可能涉及到一些基本的操作,比如变量的定义、循环的使用或者条件判断等。通过这些代码,初学者可以看到编程是如何工作的,理解每一行代码的作用。
如果你对代码中的某些部分不太明白,可以逐行分析,看看每一行是做什么的,或者查找相关的资料来帮助理解。编程的学习过程就是不断尝试和探索,慢慢你就会变得更加熟练。
记住,遇到不懂的地方是很正常的,重要的是保持好奇心和耐心,继续学习和实践。
import sys
sys.dont_write_bytecode = True
现在,你可以通过给 Python 解释器加上 -B 这个选项,或者在运行解释器之前设置 PYTHONDONTWRITEBYTECODE 这个环境变量,来阻止 Python 写入 .pyc 或 .pyo 文件。这个设置在 Python 程序中可以通过
sys.dont_write_bytecode
变量来访问,Python 代码也可以修改这个值来改变解释器的行为。
所以你可以这样运行你的程序:python -B prog.py
。
更新于 2010-11-27:Python 3.2 通过引入一个特殊的 __pycache__
子文件夹来解决源文件夹中出现 .pyc 文件的问题,详情见 Python 3.2 新特性 - PYC 存储目录。
注意:默认情况下会生成字节码,这是出于“性能”考虑(想了解更多信息可以查看 python2 和 python3 的相关内容)。
- 生成字节码 .pyc 文件是一种 缓存 机制(也就是说,它能大大提高平均性能)。
- 将 Python 配置为
PYTHONDONTWRITEBYTECODE=1
可能会影响 Python 的性能(关于 python2 的信息请见 https://www.python.org/dev/peps/pep-0304/,关于 python3 的信息请见 https://www.python.org/dev/peps/pep-3147/)。 - 如果你对性能影响感兴趣,可以查看这里 https://github.com/python/cpython。