How to minimize python installation on the client and minimize python on the client
Because we want to add python support to our desktop software, we want to simplify the python library and put it directly on the client and under our directory to avoid unnecessary things, do not affect the machine. However, after the program is written to the test machine, the old hacker cannot find the no module named site. Then, he can check the code and finds that the database site cannot be found, this library is also required for python initialization. solution:
1. Try to put the Lib in python on my computer into the program directory on the client and create a python27/lib/. The result is still failed.
2. put the items under lib in the same directory as the exe. Yes, but who still displays the import pbk_resource error, but you can run the python interpreter, however, this method is not recommended because it is too complex in the same directory as the exe.
Later I checked the Py_Initialize code and found that python looks for lib like this when no PYTHONHOME is set:
The following code
if (pythonhome == NULL || *pythonhome == '\0') { if (search_for_prefix(argv0_path, LANDMARK)) pythonhome = prefix; else pythonhome = NULL; } else strncpy(prefix, pythonhome, MAXPATHLEN);
1. When pythonhome is NULL, the python initialization function calls search_for_prefix to set the default home
static intsearch_for_prefix(char *argv0_path, char *landmark){ /* Search from argv0_path, until landmark is found */ strcpy(prefix, argv0_path); do { if (gotlandmark(lan dmark)) return 1; reduce(prefix); } while (prefix[0]); return 0;}
2. landmark is a string containing lib/OS. py. gotlandmark mainly tests whether lib/OS. py exists in the current directory.
/* gotlandmark only called by search_for_prefix, which ensures 'prefix' is null terminated in bounds. join() ensures 'landmark' can not overflow prefix if too long.*/static intgotlandmark(char *landmark){ int ok; Py_ssize_t n; n = strlen(prefix); join(prefix, landmark); ok = ismodule(prefix); prefix[n] = '\0'; return ok;}
3. If no, search for a directory above and continue step 2 until the directory is found or the prefix [0] is 0.
So we only need to test the lib under python27 to the exe directory on the client.
After you run the test program again, it will be normal. The next step is to streamline the database. You can simply delete the databases such as test, unittest, and email.