Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I put pyc files under version control?

I forked a GitHub project in Python. After running the project for the first time, some .pyc files appeared inside. Should I put them under version control and commit them to my fork?

like image 918
Erel Segal-Halevi Avatar asked Aug 20 '15 05:08

Erel Segal-Halevi


People also ask

Does PYC run faster?

A program doesn't run any faster when it is read from a ". pyc" or ". pyo" file than when it is read from a ". py" file; the only thing that's faster about ".

Should you push __ Pycache __?

__pycache__ is among the directories that shouldn't be pushed to remote repositories. Therefore, all you need to do is specify the directory in . gitignore file. Note that for Python projects in general, there are a lot more files that need to go into .

Are PYC files faster than py files?

pyo file than when it is read from a . py file; the only thing that's faster about . pyc or . pyo files is the speed with which they are loaded.


2 Answers

You shouldn't. .pyc files contain bytecode, which can be different for different versions and implementation of Python.

Just add *.pyc line in your .gitignore or global gitignore.

Also take a look at the great collection of gitignore files for almost all platforms. You can use this one for your python projects:

# 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/ 
like image 167
svfat Avatar answered Oct 04 '22 00:10

svfat


These files are compiled versions of the code already in the repo, so that Python can execute the code faster. Since they are a direct computational result of the actual source code there's no benefit to checking them in - they'd just need to be updated every time the source code was updated. Also, there's no guarantee (to my knowledge) that different machines or versions of Python will generate compatible .pyc files, meaning distributing the .pyc files you generated could potentially break other people's environments.

Instead you could fix the .gitignore file to ignore .pyc files and commit that to your fork (or even back to the upstream repo). That way no one will notice or need to worry about these files in the future.

like image 22
dimo414 Avatar answered Oct 03 '22 23:10

dimo414