首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免.pyc文件?

如何避免.pyc文件?
EN

Stack Overflow用户
提问于 2008-09-30 18:55:59
回答 10查看 132.4K关注 0票数 285

我可以在不生成编译的.pyc文件的情况下运行python解释器吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 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的更多信息,请参阅此处)。

  • 字节码.pyc文件的生成是caching的一种形式(即极大地提高了普通python和PYTHONDONTWRITEBYTECODE=1的性能)。
  • 如果您对性能影响感兴趣,请查看此处https://github.com/python/cpython
票数 305
EN

Stack Overflow用户

发布于 2012-03-05 13:59:48

代码语言:javascript
复制
import sys

sys.dont_write_bytecode = True
票数 118
EN

Stack Overflow用户

发布于 2008-09-30 19:44:05

实际上,在Python 2.3+中有一种方法可以做到这一点,但它有点晦涩难懂。我不知道你是否意识到这一点,但你可以这样做:

代码语言:javascript
复制
$ 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读取任何内容,则可能需要对此进行调整(这可以很容易地完成)。

根据我的经验,性能不会因此受到太大影响,但在以这种方式导入任何非常大的模块之前,您应该三思而后行。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/154443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档