Georg Brandl added the comment:

Since the PEP is now withdrawn, I updated Neal's patch to the trunk and
added the env variable as well as the sys module value, including
documentation.

----------
priority: low -> normal
Added file: http://bugs.python.org/file8567/no-pyc-flag.diff

____________________________________
Tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue602345>
____________________________________
Index: Python/pythonrun.c
===================================================================
--- Python/pythonrun.c  (Revision 58468)
+++ Python/pythonrun.c  (Arbeitskopie)
@@ -72,6 +72,7 @@
 int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
 int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
 int Py_NoSiteFlag; /* Suppress 'import site' */
+int Py_ReadOnlyBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
 int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
 int Py_FrozenFlag; /* Needed by getpath.c */
 int Py_UnicodeFlag = 0; /* Needed by compile.c */
@@ -172,6 +173,8 @@
                Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
        if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
                Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
+       if ((p = Py_GETENV("PYTHONNOPYCFILES")) && *p != '\0')
+               Py_ReadOnlyBytecodeFlag = add_flag(Py_ReadOnlyBytecodeFlag, p);
 
        interp = PyInterpreterState_New();
        if (interp == NULL)
Index: Python/import.c
===================================================================
--- Python/import.c     (Revision 58468)
+++ Python/import.c     (Arbeitskopie)
@@ -951,8 +951,11 @@
                if (Py_VerboseFlag)
                        PySys_WriteStderr("import %s # from %s\n",
                                name, pathname);
-               if (cpathname)
-                       write_compiled_module(co, cpathname, mtime);
+               if (cpathname) {
+                       PyObject *ro = PySys_GetObject("readonly_bytecode");
+                       if (ro == NULL || !PyObject_IsTrue(ro))
+                               write_compiled_module(co, cpathname, mtime);
+               }
        }
        m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
        Py_DECREF(co);
Index: Python/sysmodule.c
===================================================================
--- Python/sysmodule.c  (Revision 58468)
+++ Python/sysmodule.c  (Arbeitskopie)
@@ -1128,6 +1128,9 @@
        v = Py_BuildValue("(ssz)", "CPython", branch, svn_revision);
        PyDict_SetItemString(sysdict, "subversion", v);
        Py_XDECREF(v);
+        PyDict_SetItemString(sysdict, "readonly_bytecode",
+                             v = PyBool_FromLong(Py_ReadOnlyBytecodeFlag));
+        Py_XDECREF(v);
        /*
         * These release level checks are mutually exclusive and cover
         * the field, so don't get too fancy with the pre-processor!
Index: Include/pydebug.h
===================================================================
--- Include/pydebug.h   (Revision 58468)
+++ Include/pydebug.h   (Arbeitskopie)
@@ -17,6 +17,7 @@
 PyAPI_DATA(int) Py_UnicodeFlag;
 PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
 PyAPI_DATA(int) Py_DivisionWarningFlag;
+PyAPI_DATA(int) Py_ReadOnlyBytecodeFlag;
 /* _XXX Py_QnewFlag should go away in 3.0.  It's true iff -Qnew is passed,
   on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
   true divisions (which they will be in 3.0). */
Index: Doc/library/sys.rst
===================================================================
--- Doc/library/sys.rst (Revision 58468)
+++ Doc/library/sys.rst (Arbeitskopie)
@@ -457,6 +457,17 @@
    implement a dynamic prompt.
 
 
+.. data:: readonly_bytecode
+
+   If this is true, Python won't try to write ``.pyc`` or ``.pyo`` files on the
+   import of source modules.  This value is initially set to ``True`` or 
``False``
+   depending on the ``-R`` command line option and the ``PYTHONNOPYCFILES``
+   environment variable, but you can set it yourself to control bytecode file
+   generation.
+
+   .. versionadded:: 2.6
+
+
 .. function:: setcheckinterval(interval)
 
    Set the interpreter's "check interval".  This integer value determines how 
often
Index: Modules/main.c
===================================================================
--- Modules/main.c      (Revision 58468)
+++ Modules/main.c      (Arbeitskopie)
@@ -40,7 +40,7 @@
 static int  orig_argc;
 
 /* command line options */
-#define BASE_OPTS "3c:dEhim:OQ:StuUvVW:xX?"
+#define BASE_OPTS "3c:dEhim:OQ:RStuUvVW:xX?"
 
 #ifndef RISCOS
 #define PROGRAM_OPTS BASE_OPTS
@@ -71,27 +71,30 @@
 -O     : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\
 -OO    : remove doc-strings in addition to the -O optimizations\n\
 -Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\
+-R     : don't write .py[co] files on import; also PYTHONNOPYCFILES=x\n\
 -S     : don't imply 'import site' on initialization\n\
 -t     : issue warnings about inconsistent tab usage (-tt: issue errors)\n\
--u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
 ";
 static char *usage_3 = "\
+-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
          see man page for details on internal buffering relating to '-u'\n\
 -v     : verbose (trace import statements); also PYTHONVERBOSE=x\n\
          can be supplied multiple times to increase verbosity\n\
 -V     : print the Python version number and exit (also --version)\n\
 -W arg : warning control; arg is action:message:category:module:lineno\n\
 -x     : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
+";
+static char *usage_4 = "\
 -3     : warn about Python 3.x incompatibilities\n\
 file   : program read from script file\n\
 -      : program read from stdin (default; interactive mode if a tty)\n\
-";
-static char *usage_4 = "\
 arg ...: arguments passed to program in sys.argv[1:]\n\n\
 Other environment variables:\n\
 PYTHONSTARTUP: file executed on interactive startup (no default)\n\
 PYTHONPATH   : '%c'-separated list of directories prefixed to the\n\
                default module search path.  The result is sys.path.\n\
+";
+static char *usage_5 = "\
 PYTHONHOME   : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\
                The default module search path uses %s.\n\
 PYTHONCASEOK : ignore case in 'import' statements (Windows).\n\
@@ -110,7 +113,8 @@
                fprintf(f, usage_1);
                fprintf(f, usage_2);
                fprintf(f, usage_3);
-               fprintf(f, usage_4, DELIM, DELIM, PYTHONHOMEHELP);
+               fprintf(f, usage_4, DELIM);
+               fprintf(f, usage_5, DELIM, PYTHONHOMEHELP);
        }
 #if defined(__VMS)
        if (exitcode == 0) {
@@ -307,6 +311,10 @@
                        Py_OptimizeFlag++;
                        break;
 
+               case 'R':
+                       Py_ReadOnlyBytecodeFlag++;
+                       break;
+
                case 'S':
                        Py_NoSiteFlag++;
                        break;
_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to