Patch from M.-A. Lemburg:
Python on UNIX now trusts PYTHONHOME unconditionally Modules/getpath.c: Landmark changed to os.py. Setting PYTHONHOME now unconditionally sets sys.prefix (and sys.exec_prefix). No further checks are done whether the standard lib can be found in that location or not. This is in sync with the PC subdir getpath implementations. PC/getpathp.c: Landmark changed to os.py. PC/os2vacpp/getpathp.c: Landmark changed to os.py. Note: BAW's checkin on exceptions.c eliminates earlier concerns about a bogus PYTHONHOME value leading to a core dump. Instead it causes a useless sys.path and prevents imports.
This commit is contained in:
parent
b80a777859
commit
847a9968e9
|
@ -87,7 +87,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||||
* Modules/Setup. If the landmark is found, we're done.
|
* Modules/Setup. If the landmark is found, we're done.
|
||||||
*
|
*
|
||||||
* For the remaining steps, the prefix landmark will always be
|
* For the remaining steps, the prefix landmark will always be
|
||||||
* lib/python$VERSION/string.py and the exec_prefix will always be
|
* lib/python$VERSION/os.py and the exec_prefix will always be
|
||||||
* lib/python$VERSION/lib-dynload, where $VERSION is Python's version
|
* lib/python$VERSION/lib-dynload, where $VERSION is Python's version
|
||||||
* number as supplied by the Makefile. Note that this means that no more
|
* number as supplied by the Makefile. Note that this means that no more
|
||||||
* build directory checking is performed; if the first step did not find
|
* build directory checking is performed; if the first step did not find
|
||||||
|
@ -150,7 +150,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef LANDMARK
|
#ifndef LANDMARK
|
||||||
#define LANDMARK "string.py"
|
#define LANDMARK "os.py"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char prefix[MAXPATHLEN+1];
|
static char prefix[MAXPATHLEN+1];
|
||||||
|
@ -265,6 +265,18 @@ search_for_prefix(argv0_path, home)
|
||||||
int n;
|
int n;
|
||||||
char *vpath;
|
char *vpath;
|
||||||
|
|
||||||
|
/* If PYTHONHOME is set, we believe it unconditionally */
|
||||||
|
if (home) {
|
||||||
|
char *delim;
|
||||||
|
strcpy(prefix, home);
|
||||||
|
delim = strchr(prefix, DELIM);
|
||||||
|
if (delim)
|
||||||
|
*delim = '\0';
|
||||||
|
joinpath(prefix, lib_python);
|
||||||
|
joinpath(prefix, LANDMARK);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check to see if argv[0] is in the build directory */
|
/* Check to see if argv[0] is in the build directory */
|
||||||
strcpy(prefix, argv0_path);
|
strcpy(prefix, argv0_path);
|
||||||
joinpath(prefix, "Modules/Setup");
|
joinpath(prefix, "Modules/Setup");
|
||||||
|
@ -290,19 +302,6 @@ search_for_prefix(argv0_path, home)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (home) {
|
|
||||||
/* Check $PYTHONHOME */
|
|
||||||
char *delim;
|
|
||||||
strcpy(prefix, home);
|
|
||||||
delim = strchr(prefix, DELIM);
|
|
||||||
if (delim)
|
|
||||||
*delim = '\0';
|
|
||||||
joinpath(prefix, lib_python);
|
|
||||||
joinpath(prefix, LANDMARK);
|
|
||||||
if (ismodule(prefix))
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Search from argv0_path, until root is found */
|
/* Search from argv0_path, until root is found */
|
||||||
strcpy(prefix, argv0_path);
|
strcpy(prefix, argv0_path);
|
||||||
do {
|
do {
|
||||||
|
@ -334,16 +333,8 @@ search_for_exec_prefix(argv0_path, home)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
/* Check to see if argv[0] is in the build directory */
|
/* If PYTHONHOME is set, we believe it unconditionally */
|
||||||
strcpy(exec_prefix, argv0_path);
|
|
||||||
joinpath(exec_prefix, "Modules/Setup");
|
|
||||||
if (isfile(exec_prefix)) {
|
|
||||||
reduce(exec_prefix);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (home) {
|
if (home) {
|
||||||
/* Check $PYTHONHOME */
|
|
||||||
char *delim;
|
char *delim;
|
||||||
delim = strchr(home, DELIM);
|
delim = strchr(home, DELIM);
|
||||||
if (delim)
|
if (delim)
|
||||||
|
@ -352,10 +343,17 @@ search_for_exec_prefix(argv0_path, home)
|
||||||
strcpy(exec_prefix, home);
|
strcpy(exec_prefix, home);
|
||||||
joinpath(exec_prefix, lib_python);
|
joinpath(exec_prefix, lib_python);
|
||||||
joinpath(exec_prefix, "lib-dynload");
|
joinpath(exec_prefix, "lib-dynload");
|
||||||
if (isdir(exec_prefix))
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check to see if argv[0] is in the build directory */
|
||||||
|
strcpy(exec_prefix, argv0_path);
|
||||||
|
joinpath(exec_prefix, "Modules/Setup");
|
||||||
|
if (isfile(exec_prefix)) {
|
||||||
|
reduce(exec_prefix);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Search from argv0_path, until root is found */
|
/* Search from argv0_path, until root is found */
|
||||||
strcpy(exec_prefix, argv0_path);
|
strcpy(exec_prefix, argv0_path);
|
||||||
do {
|
do {
|
||||||
|
|
|
@ -53,7 +53,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
* We attempt to locate the "Python Home" - if the PYTHONHOME env var
|
* We attempt to locate the "Python Home" - if the PYTHONHOME env var
|
||||||
is set, we believe it. Otherwise, we use the path of our host .EXE's
|
is set, we believe it. Otherwise, we use the path of our host .EXE's
|
||||||
to try and locate our "landmark" (lib\\string.py) and deduce our home.
|
to try and locate our "landmark" (lib\\os.py) and deduce our home.
|
||||||
- If we DO have a Python Home: The relevant sub-directories (Lib,
|
- If we DO have a Python Home: The relevant sub-directories (Lib,
|
||||||
plat-win, lib-tk, etc) are based on the Python Home
|
plat-win, lib-tk, etc) are based on the Python Home
|
||||||
- If we DO NOT have a Python Home, the core Python Path is
|
- If we DO NOT have a Python Home, the core Python Path is
|
||||||
|
@ -110,7 +110,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LANDMARK
|
#ifndef LANDMARK
|
||||||
#define LANDMARK "lib\\string.py"
|
#define LANDMARK "lib\\os.py"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char prefix[MAXPATHLEN+1];
|
static char prefix[MAXPATHLEN+1];
|
||||||
|
|
|
@ -68,14 +68,14 @@ extern BOOL PyWin_IsWin32s();
|
||||||
*
|
*
|
||||||
* Otherwise, if there is a PYTHONPATH environment variable, we return that.
|
* Otherwise, if there is a PYTHONPATH environment variable, we return that.
|
||||||
*
|
*
|
||||||
* Otherwise we try to find $progpath/lib/string.py, and if found, then
|
* Otherwise we try to find $progpath/lib/os.py, and if found, then
|
||||||
* root is $progpath/lib, and we return Python path as compiled PYTHONPATH
|
* root is $progpath/lib, and we return Python path as compiled PYTHONPATH
|
||||||
* with all "./lib" replaced by $root (as above).
|
* with all "./lib" replaced by $root (as above).
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LANDMARK
|
#ifndef LANDMARK
|
||||||
#define LANDMARK "lib\\string.py"
|
#define LANDMARK "lib\\os.py"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char prefix[MAXPATHLEN+1];
|
static char prefix[MAXPATHLEN+1];
|
||||||
|
|
Loading…
Reference in New Issue