我已经看到了一些.dockerignore
Python项目的文件示例,其中*.pyc
文件和/或__pycache__
文件夹被忽略:
**/__pycache__
*.pyc
由于无论如何将要在容器中重新创建这些文件/文件夹,所以我想知道这样做是否是一个好习惯。
是的,这是推荐做法。有以下几个原因:
在.dockerignore
您指定不会生成结果图像的文件时,在构建最小图像时这可能至关重要。大致来说,字节码文件的大小等于实际文件的大小。字节码文件不是要分发的,这就是为什么我们通常也将它们放入.gitignore
。
在早期版本的Python 3.x中,存在一些与缓存有关的问题:
Python在.pyc文件中缓存字节码的方案在具有多个Python解释器的环境中效果不佳。如果一个解释程序遇到另一个解释程序创建的缓存文件,它将重新编译源文件并覆盖该缓存文件,从而失去缓存的好处。
从Python 3.2开始,所有缓存的文件都以解释器版本为前缀,mymodule.cpython-32.pyc
并在__pychache__
目录下显示。顺便说一句,从Python 3.8开始,您甚至可以控制要存储缓存的目录。当您限制对目录的写访问但仍然希望获得缓存使用的好处时,此方法可能很有用。
通常,缓存系统可以正常运行,但是总有一天可能会出现问题。值得注意的是,如果缺少.pyc
该.py
文件,将使用缓存的(位于同一目录中)文件代替该文件.py
。实际上,这并不常见,但是如果某些东西持续存在,考虑删除缓存文件将是一个好主意。当您尝试使用Python缓存系统或在不同环境中执行脚本时,这一点可能很重要。
您很可能甚至不需要考虑它,但是缓存文件可能包含某种敏感信息。由于当前的实现,in .pyc
文件中提供了实际文件的绝对路径。在某些情况下,您不想共享此类信息。
似乎与字节码文件进行交互是非常常见的必要,例如django-extensions具有适当的选项compile_pyc
和clean_pyc
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句