为何导入Python模块后未生成__pycache__目录?
嘿,这个问题我之前折腾过几次,咱们来梳理下几种常见的原因:
启动解释器时加了
-B参数
如果你启动Python3.6的时候用了python3.6 -B,这个参数会强制Python不生成字节码文件(.pyc),自然也不会创建__pycache__目录。你可以检查下自己启动解释器的命令是不是带了这个参数。环境变量
PYTHONDONTWRITEBYTECODE被设置
如果系统里设置了PYTHONDONTWRITEBYTECODE=1这个环境变量,Python会全局禁用字节码文件的生成。你可以在终端里输入echo $PYTHONDONTWRITEBYTECODE看看是不是输出了1,如果是的话,取消这个变量设置就能恢复正常。脚本所在目录没有写入权限
如果你的sc.py所在的目录是只读的,或者当前用户没有该目录的写入权限,Python没法创建__pycache__目录。你可以试试在该目录下创建一个空文件,看看能不能成功,来验证权限问题。模块字节码已经存在且未过期
要是你之前已经import过一次sc,而且之后没有修改过sc.py的内容,Python会直接复用已有的字节码文件,不会重新生成,但__pycache__目录应该是已经存在的。如果是这种情况,你可以删除__pycache__后再import一次,应该就会重新生成了。使用了优化模式启动解释器(少见但可能)
如果你用python3.6 -O或者python3.6 -OO启动解释器,生成的字节码文件会带有opt-1或opt-2的后缀(比如sc.cpython-36.opt-1.pyc),但依然会存在于__pycache__目录里。不过这种情况目录还是会生成,只是文件名不同,可能你没注意到?
内容的提问来源于stack exchange,提问作者SavinI

