Python configuration question when python scripts are executed using Appweb as web server.

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri Aug 7 01:37:13 EDT 2009


En Thu, 06 Aug 2009 12:49:30 -0300, IronyOfLife <mydevforums at gmail.com>  
escribió:
> On Aug 5, 4:18 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
>> En Tue, 04 Aug 2009 10:15:24 -0300, IronyOfLife <mydevfor... at gmail.com>
>> escribió:
>> > On Aug 3, 8:42 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
>> >> En Mon, 03 Aug 2009 11:04:07 -0300, IronyOfLife  
>> <mydevfor... at gmail.com>  
>> >> escribió:
>>
>> >> > I have installed python 2.6.2 in windows xp professional machine. I
>> >> > have set the following environment variables -- PYTHONPATH. It  
>> points
>> >> > to following windows folders: python root folder, the lib folder  
>> and
>> >> > lib-tk folder.
>>
>> >> Why? Did you read it somewhere? Usually there is no need to set the  
>> >> PYTHONPATH variable at all; remove it.
>>
>> > Setting PYTHONPATH environment variables is mentioned in Python docs.
>>
>> Could you provide a link please? Setting PYTHONPATH should not be
>
> Here are couple of links that discusses setting PYTHONPATH environment
> variable.
> http://docs.python.org/using/windows.html

Ouch, that document should be reworked and updated!

> http://www.daimi.au.dk/~chili/PBI/pythonpath.html

That's mostly obsolete for current versions. Since PEP370 [0] was  
implemented, a per-user private directory is already in sys.path now, so  
there is no need to play with PYTHONPATH.

> I understand your concerns regarding setting of PYTHONPATH while
> multiple versions of Python are installed on the same machine. My fix
> however does not use PYTHONPATH. The GNUTLS wrapper module for PYTHON
> loads the GNUTLS dll's and it was not able to find them. Using FileMon
> (win tool) I found out the paths that are scanned and I copied the
> dlls to one of such paths. I still do not like this fix. This is a
> temporary solution.

Note that this cannot be fixed from inside Python. When you import a  
module, the interpreter scans the directories in ITS search path  
(sys.path) looking for a matching module. Once the module is found:
- if it is a Python file, it's executed
- if it is an extension module (a .pyd file, in fact a .dll renamed) it's  
loaded using LoadLibraryEx (a Windows function), and finally its  
initialization routine is executed.

For LoadLibrary to successfully load the module, all its external  
references must be resolved. That is, Windows must locate and load all  
other DLLs that this module depends on, using its own search strategy [1],  
taking into account the PATH environment variable and many other places.

It is at this stage that you get the error: when the gnutls wrapper  
attempts to load the gnutls DLL. That search is done by Windows, not by  
Python, and PYTHONPATH has nothing to do with it.

Why different results in IIS and appweb? Note that there exist several  
search strategies, they depend on the application home directory, the  
location of the .exe, whether SetDllDirectory was called or not, whether  
the application has a manifest or not, a .local file or not... Hard to  
tell with so many variables.

> Can you explain maybe with some sample how to set .pth files? Maybe
> this will resolve my issue.

Yes, but I don't think this will actually help with your issue.

pth files are described here [2]. Suppose you want to add c:\foo\bar to  
sys.path, then write a file whatever.pth containing this single line:

c:\foo\bar

and place it on c:\your_python_installation\lib\site-packages
When the interpreter starts, it will find the .pth file, read it, and add  
any directory it finds (that actually exists) to sys.path

Note that another Python installation will use a diferent site-packages  
directory and won't find this particular .pth file, so different Python  
versions don't interfere.

---

[0] http://python.org/dev/peps/pep-0370/
[1] http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx
[2] http://docs.python.org/library/site.html

-- 
Gabriel Genellina




More information about the Python-list mailing list