即使设置了PYTHONDONTWRITEBYTECODE=1,Python3仍会生成__pycache__文件夹。

24
我想问一下是否有其他方法可以禁用服务器上的创建__pycache__的功能。
我的问题是,即使我已经设置了环境变量为PYTHONDONTWRITEBYTECODE=1,它仍然会不断生成。
我想要禁用__pycache__,因为我在部署中只保留5个版本。这个缓存会阻止删除第6个版本,因为缓存是由root拥有的,只能通过sudo删除。
我正在使用capistrano进行部署。
谢谢您的回复!

你是否执行了 export PYTHONDONTWRITEBYTECODE=1 命令?仅仅在 shell 中设置 PYTHONDONTWRITEBYTECODE=1 是不够的。 - BallpointBen
@BallpointBen 我已经导出了它。我还将其添加到了 /etc/environment 中,当我执行 printenv PYTHONDONTWRITEBYTECODE 时,它显示在我的 deploy_user 和 root 用户中都是 1 - anne
大家好,我已经解决了这个问题。export PYTHONDONTWRITEBYTECODE=1 是有效的。pycache文件夹的生成在docker中(我也使用了docker)。我的做法是在docker内部,我设置了export PYTHONDONTWRITEBYTECODE=1。所以问题得到了解决。谢谢你们的帮助。 - anne
3个回答

27

我已经解决了这个问题。export PYTHONDONTWRITEBYTECODE=1有效。生成pycache文件夹是在Docker中完成的(我也使用了Docker)。我的做法是在Docker内部,我设置了export PYTHONDONTWRITEBYTECODE=1,这样就解决了问题。感谢您的帮助。


13

你也可以通过 sys.dont_write_bytecode 在 Python 代码中禁用缓存使用:

import sys

sys.dont_write_bytecode = True

import first_module
from second_module import MyClass
...

重要提示:您需要在导入其他模块之前添加这些代码行,因为缓存文件的创建是由导入语句触发的。


不起作用。在Python 3.9.6中尝试过。 - Nav
3
@Nav:你必须将这些行放在你模块的所有其他导入之前。请看我的注释。希望能帮到你 :) - clemens

2
对于使用 Visual Studio Code 的用户:如果设置 python.testing.pytestEnabled 为 true,则 Visual Studio Code 似乎会忽略 PYTHONDONTWRITEBYTECODE=1 并在某些时候生成 __pycache__,例如保存文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接