Add -E command line switch (ignore environment variables like PYTHONHOME

and PYTHONPATH).
This commit is contained in:
Neil Schemenauer 2001-07-23 16:30:27 +00:00
parent f973c6d594
commit 7d4bb9f179
12 changed files with 59 additions and 34 deletions

View File

@ -14,6 +14,12 @@ extern DL_IMPORT(int) Py_UseClassExceptionsFlag;
extern DL_IMPORT(int) Py_FrozenFlag;
extern DL_IMPORT(int) Py_TabcheckFlag;
extern DL_IMPORT(int) Py_UnicodeFlag;
extern DL_IMPORT(int) Py_IgnoreEnvironmentFlag;
/* this is a wrapper around getenv() the pays attention to
Py_IgnoreEnvironmentFlag. It should be used for getting variables like
PYTHONPATH and PYTHONHOME from the environment */
#define Py_GETENV(s) (Py_IgnoreEnvironmentFlag ? NULL : getenv(s))
DL_IMPORT(void) Py_FatalError(char *message);

View File

@ -281,12 +281,12 @@ $(PYTHON): Modules/$(MAINOBJ) $(LDLIBRARY)
$(LDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
platform: $(PYTHON)
./$(PYTHON) -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
./$(PYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform
# Build the shared modules
sharedmods: $(PYTHON)
PYTHONPATH= ./$(PYTHON) $(srcdir)/setup.py build
./$(PYTHON) -E $(srcdir)/setup.py build
# buildno should really depend on something like LIBRARY_SRC
buildno: $(PARSER_OBJS) \
@ -466,26 +466,26 @@ $(LIBRARY_OBJS) $(MODOBJS) Modules/$(MAINOBJ): $(PYTHON_HEADERS)
# Test the interpreter (twice, once without .pyc files, once with)
TESTOPTS= -l
TESTPROG= $(srcdir)/Lib/test/regrtest.py
TESTPYTHON= ./$(PYTHON) -tt
TESTPYTHON= ./$(PYTHON) -E -tt
test: all platform
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
-PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
-$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
$(TESTPYTHON) $(TESTPROG) $(TESTOPTS)
QUICKTESTOPTS= $(TESTOPTS) -x test_thread test_signal test_strftime \
test_unicodedata test_re test_sre test_select test_poll \
test_linuxaudiodev test_sunaudiodev
quicktest: all platform
-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
-PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS)
PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS)
-$(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS)
$(TESTPYTHON) $(TESTPROG) $(QUICKTESTOPTS)
MEMTESTOPTS= $(QUICKTESTOPTS) -x test_dl test___all__ test_fork1 \
test_longexp
memtest: all platform
-rm -f $(srcdir)/Lib/test/*.py[co]
-PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
PYTHONPATH= $(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
-$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
$(TESTPYTHON) $(TESTPROG) $(MEMTESTOPTS)
# Install everything
install: altinstall bininstall maninstall
@ -708,7 +708,7 @@ libainstall: all
# Install the dynamically loadable modules
# This goes into $(exec_prefix)
sharedinstall:
PYTHONPATH= ./$(PYTHON) $(srcdir)/setup.py install \
./$(PYTHON) -E $(srcdir)/setup.py install \
--install-platlib=$(DESTSHARED)
# Build the toplevel Makefile

View File

@ -16,6 +16,9 @@ python \- an interpreted, interactive, object-oriented programming language
.B \-S
]
[
.B \-E
]
[
.B \-t
]
[
@ -99,6 +102,10 @@ and the site-dependent manipulations of
.I sys.path
that it entails.
.TP
.B \-E
Ignore environment variables like PYTHONPATH and PYTHONHOME that modify
the behavior of the interpreter.
.TP
.B \-t
Issue a warning when a source file mixes tabs and spaces for
indentation in a way that makes it depend on the worth of a tab

View File

@ -365,7 +365,7 @@ calculate_path(void)
static char delimiter[2] = {DELIM, '\0'};
static char separator[2] = {SEP, '\0'};
char *pythonpath = PYTHONPATH;
char *rtpypath = getenv("PYTHONPATH");
char *rtpypath = Py_GETENV("PYTHONPATH");
char *home = Py_GetPythonHome();
char *path = getenv("PATH");
char *prog = Py_GetProgramName();

View File

@ -28,7 +28,7 @@ static char **orig_argv;
static int orig_argc;
/* command line options */
#define BASE_OPTS "c:diOStuUvxXhVW:"
#define BASE_OPTS "c:diOSEtuUvxXhVW:"
#ifndef RISCOS
#define PROGRAM_OPTS BASE_OPTS
@ -53,6 +53,7 @@ Options and arguments (and corresponding environment variables):\n\
-O : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)\n\
-OO : remove doc-strings in addition to the -O optimizations\n\
-S : don't imply 'import site' on initialization\n\
-E : ignore environment variables (such as PYTHONPATH)\n\
-t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\
";
static char *usage_mid = "\
@ -108,6 +109,8 @@ Py_Main(int argc, char **argv)
int stdin_is_interactive = 0;
int help = 0;
int version = 0;
int saw_inspect_flag = 0;
int saw_unbuffered_flag = 0;
PyCompilerFlags cf;
orig_argc = argc; /* For Py_GetArgcArgv() */
@ -117,11 +120,6 @@ Py_Main(int argc, char **argv)
Py_RISCOSWimpFlag = 0;
#endif
if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
inspect = 1;
if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
unbuffered = 1;
PySys_ResetWarnOptions();
while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) {
@ -146,6 +144,7 @@ Py_Main(int argc, char **argv)
case 'i':
inspect++;
saw_inspect_flag = 1;
Py_InteractiveFlag++;
break;
@ -157,12 +156,17 @@ Py_Main(int argc, char **argv)
Py_NoSiteFlag++;
break;
case 'E':
Py_IgnoreEnvironmentFlag++;
break;
case 't':
Py_TabcheckFlag++;
break;
case 'u':
unbuffered++;
saw_unbuffered_flag = 1;
break;
case 'v':
@ -210,6 +214,13 @@ Py_Main(int argc, char **argv)
exit(0);
}
if (!saw_inspect_flag &&
(p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
inspect = 1;
if (!saw_unbuffered_flag &&
(p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
unbuffered = 1;
if (command == NULL && _PyOS_optind < argc &&
strcmp(argv[_PyOS_optind], "-") != 0)
{
@ -307,7 +318,7 @@ Py_Main(int argc, char **argv)
}
else {
if (filename == NULL && stdin_is_interactive) {
char *startup = getenv("PYTHONSTARTUP");
char *startup = Py_GETENV("PYTHONSTARTUP");
if (startup != NULL && startup[0] != '\0') {
FILE *fp = fopen(startup, "r");
if (fp != NULL) {

View File

@ -594,7 +594,7 @@ inittime(void)
m = Py_InitModule3("time", time_methods, module_doc);
d = PyModule_GetDict(m);
/* Accept 2-digit dates unless PYTHONY2K is set and non-empty */
p = getenv("PYTHONY2K");
p = Py_GETENV("PYTHONY2K");
ins(d, "accept2dyear", PyInt_FromLong((long) (!p || !*p)));
/* Squirrel away the module's dictionary for the y2k check */
Py_INCREF(d);

View File

@ -425,7 +425,7 @@ calculate_path(void)
char *buf;
size_t bufsz;
char *pythonhome = Py_GetPythonHome();
char *envpath = getenv("PYTHONPATH");
char *envpath = Py_GETENV("PYTHONPATH");
#ifdef MS_WIN32
int skiphome, skipdefault;

View File

@ -289,7 +289,7 @@ calculate_path(void)
char *buf;
int bufsz;
char *pythonhome = Py_GetPythonHome();
char *envpath = getenv("PYTHONPATH");
char *envpath = Py_GETENV("PYTHONPATH");
#ifdef MS_WIN32
char *machinepath, *userpath;

View File

@ -30,9 +30,9 @@ Py_FrozenMain(int argc, char **argv)
Py_FrozenFlag = 1; /* Suppress errors from getpath.c */
if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0')
inspect = 1;
if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
unbuffered = 1;
if (unbuffered) {

View File

@ -1069,7 +1069,7 @@ case_ok(char *buf, int len, int namelen, char *name)
char tempbuf[MAX_PATH];
#endif
if (getenv("PYTHONCASEOK") != NULL)
if (Py_GETENV("PYTHONCASEOK") != NULL)
return 1;
#ifdef __CYGWIN__
@ -1092,7 +1092,7 @@ case_ok(char *buf, int len, int namelen, char *name)
struct ffblk ffblk;
int done;
if (getenv("PYTHONCASEOK") != NULL)
if (Py_GETENV("PYTHONCASEOK") != NULL)
return 1;
done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
@ -1109,7 +1109,7 @@ case_ok(char *buf, int len, int namelen, char *name)
FSSpec fss;
OSErr err;
if (getenv("PYTHONCASEOK") != NULL)
if (Py_GETENV("PYTHONCASEOK") != NULL)
return 1;
#ifndef USE_GUSI1
@ -1147,7 +1147,7 @@ case_ok(char *buf, int len, int namelen, char *name)
char dirname[MAXPATHLEN + 1];
const int dirlen = len - namelen - 1; /* don't want trailing SEP */
if (getenv("PYTHONCASEOK") != NULL)
if (Py_GETENV("PYTHONCASEOK") != NULL)
return 1;
/* Copy the dir component into dirname; substitute "." if empty */

View File

@ -63,6 +63,7 @@ int Py_NoSiteFlag; /* Suppress 'import site' */
int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
int Py_FrozenFlag; /* Needed by getpath.c */
int Py_UnicodeFlag = 0; /* Needed by compile.c */
int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
static int initialized = 0;
@ -98,11 +99,11 @@ Py_Initialize(void)
return;
initialized = 1;
if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Py_DebugFlag = Py_DebugFlag ? Py_DebugFlag : 1;
if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Py_VerboseFlag = Py_VerboseFlag ? Py_VerboseFlag : 1;
if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0')
if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Py_OptimizeFlag = Py_OptimizeFlag ? Py_OptimizeFlag : 1;
interp = PyInterpreterState_New();
@ -225,7 +226,7 @@ Py_Finalize(void)
#ifdef Py_TRACE_REFS
if (
#ifdef MS_WINDOWS /* Only ask on Windows if env var set */
getenv("PYTHONDUMPREFS") &&
Py_GETENV("PYTHONDUMPREFS") &&
#endif /* MS_WINDOWS */
_Py_AskYesNo("Print left references?")) {
_Py_PrintReferences(stderr);
@ -394,8 +395,8 @@ char *
Py_GetPythonHome(void)
{
char *home = default_home;
if (home == NULL)
home = getenv("PYTHONHOME");
if (home == NULL && !Py_IgnoreEnvironmentFlag)
home = Py_GETENV("PYTHONHOME");
return home;
}

View File

@ -5,7 +5,7 @@ static char *prefix,*exec_prefix,*progpath,*module_search_path=0;
static void
calculate_path()
{ char *pypath=getenv("Python$Path");
{ char *pypath=Py_GETENV("Python$Path");
if(pypath)
{ module_search_path=malloc(strlen(pypath)+1);
if (module_search_path) sprintf(module_search_path,"%s",pypath);