Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该添加Python';s pyc文件到.dockrignore?_Python_Docker_Compilation_Docker Build - Fatal编程技术网

我应该添加Python';s pyc文件到.dockrignore?

我应该添加Python';s pyc文件到.dockrignore?,python,docker,compilation,docker-build,Python,Docker,Compilation,Docker Build,我已经看到了一些Python项目中的.dockerginore文件示例,其中*.pyc文件和/或\uuuuupycache\uuuu文件夹被忽略: **/__pycache__ *.pyc 由于这些文件/文件夹将在容器中重新创建,我想知道这样做是否是一种好的做法。是的,这是一种推荐做法。有几个原因: 减小结果图像的大小 在.dockrignore中,您指定的文件不会进入结果图像,这在生成最小图像时可能非常重要。粗略地说,字节码文件的大小等于实际文件的大小。字节码文件不用于分发,这就是为什么我们

我已经看到了一些Python项目中的
.dockerginore
文件示例,其中
*.pyc
文件和/或
\uuuuupycache\uuuu
文件夹被忽略:

**/__pycache__
*.pyc
由于这些文件/文件夹将在容器中重新创建,我想知道这样做是否是一种好的做法。

是的,这是一种推荐做法。有几个原因:

减小结果图像的大小 在
.dockrignore
中,您指定的文件不会进入结果图像,这在生成最小图像时可能非常重要。粗略地说,字节码文件的大小等于实际文件的大小。字节码文件不用于分发,这就是为什么我们通常也将它们放入
.gitignore

缓存相关问题 在Python 3.x的早期版本中,有几个与缓存相关的:

Python在.pyc文件中缓存字节码的方案效果不佳 在具有多个Python解释器的环境中。如果一个口译员 如果遇到由另一个解释器创建的缓存文件,则 重新编译源并覆盖缓存文件,从而丢失 缓存的好处

从Python 3.2开始,所有以解释器版本为前缀的缓存文件都是
mymodule.cpython-32.pyc
,并显示在
\uuuuuupychache\uuuu
目录下。顺便说一下,从Python3.8开始,您甚至可以创建一个存储缓存的目录。当您限制对目录的写访问,但仍希望从缓存使用中获得好处时,它可能很有用

通常,缓存系统工作正常,但总有一天会出问题。值得注意的是,如果缺少
.py
文件,则将使用缓存的
.py
(位于同一目录中)文件而不是
.py
文件。在实践中,这种情况并不常见,但如果某些东西一直在“那里”,考虑删除缓存文件是一个好的观点。在Python中试验缓存系统或在不同环境中执行脚本时,这可能很重要

安全原因 很可能您甚至不需要考虑它,但缓存文件可能包含某种敏感信息。由于当前的实现,在
.pyc
文件中显示了实际文件的绝对路径。有些情况下,您不想共享此类信息



与字节码文件交互似乎是一种非常频繁的必要性,例如,有适当的选项和。

我想知道为什么不这样做?也许是一个自以为是的问题,但我的答案是肯定的,特别是如果有变化的话。只需让解释器在每个客户端上缓存
pyc
s,以确保运行最新的代码。@Sraw似乎是不必要的工作。此外,我还可以想到某些情况下,进程可能没有足够的权限创建这些文件。