Reputation: 1011
When entering python
on Linux shell, the welcome message is printed:
[root@localhost ~]# python
Python 2.7.5 (default, Nov 20 2015, 02:00:19)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
where do those lines come from? Are they determined during compilation or installation?
I have another version of python
executable and a set of libs on my system, but when I enter that python
, it also shows the same welcome message as above.
Thanks,
UPDATE:
I use absolute path to start another version of python. And just found the welcome message has the same content as sys.version and sys.platform. But if I copy the other version of python to a different Linux machine B, and still use absolute path to run it. I get
Python 2.7.15rc1 (default, Nov 12 2018, 14:31:15)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
This welcome message is the same as machine B's python.
Upvotes: 1
Views: 352
Reputation: 1011
I've finally found the reason. The second python
binary loads .so files in startup, and it loads libpython as follows:
libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007f087cf58000)
This is the same as my system python
. After setting LD_LIBRARY_PATH
to the lib directory of the second python
, I can see the correct welcome message.
Upvotes: 1
Reputation: 2203
Edited: The C version source code is similar: https://github.com/python/cpython/blob/7e4db2f253c555568d56177c2fd083bcf8f88d34/Modules/main.c#L705
if (!Py_QuietFlag && (Py_VerboseFlag ||
(command == NULL && filename == NULL &&
module == NULL && stdin_is_interactive))) {
fprintf(stderr, "Python %s on %s\n",
Py_GetVersion(), Py_GetPlatform());
if (!Py_NoSiteFlag)
fprintf(stderr, "%s\n", COPYRIGHT);
}
which Py_GetVersion()
returns version base on a MACRO
/* Version as a string */
#define PY_VERSION "3.7.0a0"
so it is compile time determined, you probably have a messed up PATH?
Old answer, which is actually just a python module
https://github.com/python/cpython/blob/7e4db2f253c555568d56177c2fd083bcf8f88d34/Lib/code.py#L214
if banner is None:
self.write("Python %s on %s\n%s\n(%s)\n" %
(sys.version, sys.platform, cprt,
self.__class__.__name__))
elif banner:
self.write("%s\n" % str(banner))
Not sure if this answers your question, but still fun to know.
Upvotes: 1