Can anyone help on conflicts between Python 2.5 and 2.7

Steven D'Aprano steve+comp.lang.python at pearwood.info
Wed Oct 9 21:31:31 EDT 2013


Hi Errol,

Happy to help, but first I have a brief note about house-keeping... this 
group is both a mailing list and a newsgroup on Usenet. A text newsgroup, 
so I'm afraid that HTML posts are frowned upon, because a large number of 
people reading this will see your message something like this:

> <html xmlns:v="urn:schemas-microsoft-com:vml"
> xmlns:o="urn:schemas-microsoft-com:office:office"
> xmlns:w="urn:schemas-microsoft-com:office:word"
> xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
> xmlns="http://www.w3.org/TR/REC-html40"> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
> <meta name="Generator" content="Microsoft Word 14 (filtered medium)">
> <style><!--
> /* Font Definitions */
> @font-face
> 	{font-family:Calibri;
> 	panose-1:2 15 5 2 2 2 4 3 2 4;}


and so on, for about a page or two. Pretty awful, hey? 

[Aside: if you must generate HTML email, please don't use Word to do so, 
because it generates absolutely *rubbish* HTML.]

So, if you wouldn't mind, could you please turn off "Rich Text" in your 
messages here? Thanks in advance.

Now on to your question... my responses are interleaved with your 
comments.


On Wed, 09 Oct 2013 21:47:54 +0000, Errol Anderson wrote:

> I maintain a Delphi program, AAA, that runs Python 2.5 scripts using the
> PythonForDelphi (P4D)interface.  I can install both Python 2.5 and
> Python 2.7 on my computer and AAA is unaffected.   However one user of
> AAA uses another program, BBB, that requires Python 2.7.  When they run
> AAA, an error is generated that suggests that AAA has been directed to
> the Python 2.7 libraries.

I gather that you're running Windows. Is that correct?


> The specific error is identified in Python27\lib\linecache.py line 127
>         with open(fullname, 'rU') as fp:


Yes, but what actually is the error? Please copy and paste the entire 
traceback, starting with the line:

Traceback (most recent call last)


My guess is that your user is getting a SyntaxError, but I could be 
wrong. If you're getting SyntaxError, that suggests that the Python2.5 
executable is looking in the 2.7 directory.

 
> as compared with Python25\lib\linecache.py line 128
>         fp = open(fullname, 'rU')
> 
> It appears that the BBB program installs Python 2.7 to be the "default"
> Python version, although I do not know how this is done.  Assuming BBB
> cannot be changed, I would like to know how I can modify AAA so that it
> ignores any "default" settings and simply runs Python 2.5.

I'm not a Windows guru, so I might be off-mark here (I'm sure somebody 
will correct me) but as I understand it, the "default Python" under 
Windows is the one that was installed most recently.

So, assuming you have Python2.5 installed in Python25 and Python 2.7 in 
Python27, I would expect that you also have the actual executables in:

C:\Program Files\python25.exe
C:\Program Files\python27.exe

and then .py files will be associated with whichever was installed last.

I don't think this is the problem though. If it were, your user would be 
trying to run AAA with Python 2.7, and likely getting a completely 
different error.

Can you get your user to run these few lines of Python code using 
whatever technique they use to run AAA? E.g. if they run AAA by double-
clicking on an icon, you may need to create an icon that does the same 
thing but substitutes this script for AAA.


import os, sys
print sys.version
print sys.path
print os.getenv('PYTHONPATH', '-none-')
print os.getenv('PYTHONSTARTUP', '-none-')



This will identify the version of the Python executable running, the 
search path it uses for libraries, and the value of two environment 
variables which could be used to change the search path.

If you post the result of this, that will help diagnose the problem.

At worst, a dirty way of fixing this problem would be for program AAA to 
manually inspect sys.path, removing any components that look like they've 
come from Python2.7, and (if necessary) re-inserting any that come from 
Python2.5. But really, that sort of thing should be unnecessary.



-- 
Steven



More information about the Python-list mailing list