我应该把pyc文件放在版本控制下吗?

46

我在 GitHub 上 fork 了一个 Python 项目。第一次运行该项目后,出现了一些 .pyc 文件。我应该将它们放在版本控制下并提交到我的 fork 吗?


11
不可以! - William Pursell
3
不是重新编写,而是同一份代码的“字节编译”版本。请参考https://dev59.com/Jm865IYBdhLWcg3wTc3h。 - Jordfräs
2
@skyking,为什么你不把.gitignore放在源代码控制下呢? - ganduG
1
我不认为这是一个观点问题;期望用户单独定义忽略文件是不必要的工作,可能会导致错误提交。如果您的项目生成不应该成为仓库一部分的文件或路径,则应该有一个已检入的.gitignore文件。如果需要忽略特定于系统的文件,则应在~/.gitconfig中指定。 - dimo414
1
使用.gitignore来忽略需要被所有人共享的模式,使用.git/info/exclude来创建私有的模式列表。 - Flimm
显示剩余4条评论
4个回答

46

不应该这么做。 .pyc 文件包含字节码,不同版本和实现的 Python 可能不同。

只需在您的 .gitignore 或全局 gitignore 中添加 *.pyc 行。

还可以查看众多平台的 gitignore 集合文件。您可以为自己的 Python 项目使用这个:

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover

# Translations
*.mo
*.pot

# Django stuff:
*.log

# Sphinx documentation
docs/_build/

# PyBuilder
target/

4
个人而言,我更倾向于根据需要忽略文件,而不是检入一堆实际上并未使用的忽略模式。 - dimo414

14
这些文件是代码库中已经编译过的代码版本,以便Python能够更快地执行代码。由于它们是实际源代码的直接计算结果,因此将它们检入没有任何好处——每次更新源代码时都需要更新它们。此外,据我所知,不同的机器或Python版本无法生成兼容的.pyc文件,这意味着分发您生成的.pyc文件可能会破坏其他人的环境。
相反,您可以修复.gitignore文件以忽略.pyc文件,并将其提交到您的分支(甚至提交回上游代码库)。这样,将来没有人会注意或担心这些文件。

5

这个文件并没有什么坏处,但它是无用的垃圾,只是为了加速Python应用程序的执行而存在,并且每次进行更改时都会被重新构建,因此随着时间的推移,它会不断增长。要解决这个问题,您可能需要在.gitignore文件中添加__pycache__行。


3

不行。您不能将pyc文件放在版本控制下。

常规规则是“永远不要将构建产物放入源代码控制中,因为您的源代码已在源代码控制中,可|必须重复处理过程”

对于相应的PY文件,PYCs就是这样的构建产物。


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