[Tutor] when is "pythondontwritebytecode" useful?

Oscar Benjamin oscar.j.benjamin at gmail.com
Mon Jan 20 12:11:54 CET 2014


On Mon, Jan 20, 2014 at 02:42:57AM -0800, Albert-Jan Roskam wrote:
> Hi,
> 
> 
> When is setting a PYTHONDONTWRITEBYTECODE environment variable useful? Or set sys.dont_write_bytecode to True? Or start Python with the -B option?
> I know what it does (http://docs.python.org/2/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE), i.e. no pyc or pyo fiules are written, but WHY is that sometimes a good thing? The only useful scenario I can think of is when you don't have write rights to create pyc files but you want to use a package anyway.

If you don't have write permissions then it won't write the byte code files
anyway.

> Perhaps related: it is possible to import zip files, but no pyc files will be created when you do this. However, I recently opened an EGG file with a zip utility (because I knew egg uses zipimport so it's a zip-like format) and I noticed that there were .pyc files. If the creator of the egg put them there, they'd only be useful if the user uses the exact same Python implementatiopn and version, right? So hoiw can the be there?

The .pyc files will be ignored if the versions don't match.

One problem that can occur with the byte-code files is if you try to import
them using different interpreters at different times. So let's say you have a
module that is regularly imported by Python 2.6 and then you also want to use
it in a program that you regularly run with Python 2.7. The two interpreters
will fight each other constantly rewriting and stomping over each other's .pyc
files. You could use the -B option with one of the interpreters to alleviate
this.

Truthfully I've never used the option so I'm just guessing though. And in any
case Python 3 handles the multiple interpreters problem better with its
__pycache__ directory.


Oscar


More information about the Tutor mailing list