python import sys.path
I have both 2.4 and 2.5 interpreters installed on a linux box. The PythonPath is set to : PYTHONPATH=/usr/lib64/portage/pym:/prod/bacula/local/lib64/python2.4/site-pa ckages:/prod/bacula/local/lib/python2.4/site-packages My main script is getting called like so: python2.4 cleanup.py wrkstnbs The imports statements in cleanup.py are as follows: import os,sys print sys.path from datetime import datetime from optparse import OptionParser# used for parsing parameters from bacula_conf import *# used for connecting to our databases, etc. from registration_cleanup \ import RegistrationCleanup # used for interacting w/ registration db (sql1) # and configuration database (genunix) import directory_cleanup as fclean # file cleanup. One of the scripts being imported from bacula_conf is called purge_client.py. It has the following imports: import sys import MySQLdb Everytime I run "python2.4 cleanup.py wrkstnbs" I get the following error: Traceback (most recent call last): File "purge_client.py", line 22, in import MySQLdb File "/prod/bacula/local/lib64/python2.4/site-packages/MySQLdb/__init__.py", line 27, in import _mysql ImportError: /prod/bacula/local/lib64/python2.4/site-packages/_mysql.so: undefined symbol: Py_InitModule4 If I print sys.path of both the calling script and the imported module I get the following sys.path from cleanup.py: ['/prod/bacula/local/tools/bacula_conf/maintenance', '/usr/lib64/portage/pym', '/prod/bacula/local/lib64/python2.4/site-packages', '/prod/bacula/local/lib/python2.4/site-packages', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib64/python2.4/lib-dynload', '/usr/lib/portage/pym', '/usr/lib64/python2.4/site-packages', '/usr/lib/python2.4/site-packages'] However the sys.path printed by the called module purge_client.py displays as such: ['/prod/bacula/local/tools/bacula_conf/maintenance', '/usr/lib64/portage/pym', '/prod/bacula/local/lib64/python2.4/site-packages', '/prod/bacula/local/lib/python2.4/site-packages', '/usr/lib64/python25.zip', '/usr/lib64/python2.5', '/usr/lib64/python2.5/plat-linux2', '/usr/lib64/python2.5/lib-tk', '/usr/lib64/python2.5/lib-dynload', '/usr/lib64/python2.5/site-packages'] If I call purge_client.py like so: python2.4 purge_client.py wrkstnbs the sys.path is: ['/prod/bacula/local/tools/bacula_conf/maintenance', '/usr/lib64/portage/pym', '/prod/bacula/local/lib64/python2.4/site-packages', '/prod/bacula/local/lib/python2.4/site-packages', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib64/python2.4/lib-dynload', '/usr/lib/portage/pym', '/usr/lib64/python2.4/site-packages', '/usr/lib/python2.4/site-packages'] Can anyone explain why purge_client.py has a different sys.path when imported from another script? At this point I'm quite puzzled and would like to continue using the 2.4 interpreter for the time being. Thanks, Brian Kelly smime.p7s Description: S/MIME cryptographic signature -- http://mail.python.org/mailman/listinfo/python-list
FW: python import sys.path
After following your suggestions I was able to confirm that the 2.5 interpreter was being invoked. So then I grepped for all instances of python in the scripts that were imported as modules: from bacula_conf import * The calling script cleanup.py is invoking purge_client.py like an external script: def purgeAll(options, computer_name): cmd = "python purge_client.py %s" % computer_name if options.pretend <> True: error = os.system(cmd) else: _log.info("Done. No changes made due to --pretend flag.") if not error: return True else: return False When I saw the imports I assumed the functions in purge_client.py were being referenced from the calling scripts symbol table. However, that is not the case. Thanks, Brian -Original Message- From: John Machin [mailto:sjmac...@lexicon.net] Sent: Tuesday, December 30, 2008 4:42 PM To: python-list@python.org Subject: Re: python import sys.path On Dec 31, 5:05 am, "Kelly, Brian" wrote: > I have both 2.4 and 2.5 interpreters installed on a linux box. The > PythonPath is set to : > > PYTHONPATH=/usr/lib64/portage/pym:/prod/bacula/local/lib64/python2.4/site-pa > ckages:/prod/bacula/local/lib/python2.4/site-packages > > My main script is getting called like so: > > python2.4 cleanup.py wrkstnbs > > The imports statements in cleanup.py are as follows: > > import os,sys > print sys.path > from datetime import datetime > from optparse import OptionParser # used for parsing parameters > from bacula_conf import * # used for connecting to our > databases, etc. > from registration_cleanup \ > import RegistrationCleanup # used for interacting w/ > registration db (sql1) > # and configuration database > (genunix) > import directory_cleanup as fclean # file cleanup. > > One of the scripts being imported from bacula_conf is called > purge_client.py. > > It has the following imports: > > import sys > import MySQLdb > > Everytime I run "python2.4 cleanup.py wrkstnbs" I get the following error: > > Traceback (most recent call last): Have you snipped any traceback entries here? You say you are running cleanup.py but the first traceback entry is from purge_client.py!! You should first fix that, so that you've got the full story. My guess is that something along that trail is invoking another instance of the Python interpreter and somehow that instance is 2.5, not 2.4. I can't imagine how those 2.5-related entries would otherwise get into sys.path Suggestions: (1) where you are debug-printing sys.path, also print sys.version and sys.argv[0] ... and do debug-printing at more places between start and error. (2) run "python2.4 -vv cleanup.py wrkstnbs" and look for the first mention of 2.5 (indicating something has manipulated sys.path), or sudden cessation of -vv output (indicating a new instance of python is running without -vv), or some other phenomenon ... > File "purge_client.py", line 22, in > import MySQLdb > File > "/prod/bacula/local/lib64/python2.4/site-packages/MySQLdb/__init__.py", line > 27, in > import _mysql > ImportError: /prod/bacula/local/lib64/python2.4/site-packages/_mysql.so: > undefined symbol: Py_InitModule4 What happens when you run python2.4 and at the interactive prompt do >>> import _mysql ? Is there a possibility that you installed 2.5 MySQLdb into the 2.4 hierarchy? [could be a stupid question from a windows guy; this may be a non-problem on linux] Is this the first thing that you've tried after installing 2.5, or the only problem found in an exhaustive regression test of all your apps using 2.4, or somewhere in the middle? [big snip] HTH, John smime.p7s Description: S/MIME cryptographic signature -- http://mail.python.org/mailman/listinfo/python-list