[modwsgi] Re: mod_wsqi + apache 2.2 + python 2.7.1 + Win 7: getting DLL load failed

2011-04-30 Thread Alejandro
Thanks Graham for the hint. I found a pycrypto compiled with MinGW and
it worked. But I have similar issues with other modules so the problem
was still there.

Googling i found this post 
http://psycopg.lighthouseapp.com/projects/62710/tickets/20#ticket-20-6
which explains quite clearly and deeply the issue and suggests that
The ways to resolve the situation is to embed a manifest into apache
or embed it into psycopg and the author then gets for the second. I
have tried the first in order to solve the issue for all potential
cases.

I downloaded Microsoft Windows SDK, which includes mt.exe, Microsoft
(R) Manifest Tool. With this i did a:

mt.exe -inputresource:C:\Python26\python.exe;#1 -out:C:
\Python26\extracted.python.exe.manifest

Which exports the embedded manifest used in my current python.exe
(which works ok with all modules).

It looks like:

?xml version=1.0 encoding=UTF-8 standalone=yes?
assembly xmlns=urn:schemas-microsoft-com:asm.v1
manifestVersion=1.0
  trustInfo xmlns=urn:schemas-microsoft-com:asm.v3
security
  requestedPrivileges
requestedExecutionLevel level=asInvoker uiAccess=false/
requestedExecutionLevel
  /requestedPrivileges
/security
  /trustInfo
  dependency
dependentAssembly
  assemblyIdentity type=win32 name=Microsoft.VC90.CRT
version=9.0.21022.8 processorArchitecture=x86
publicKeyToken=1fc8b3b9a1e18e3b/assemblyIdentity
/dependentAssembly
  /dependency
/assembly

From here i stripped the trustInfo part and left just the dependency
one:

?xml version=1.0 encoding=UTF-8 standalone=yes?
assembly xmlns=urn:schemas-microsoft-com:asm.v1
manifestVersion=1.0
  dependency
dependentAssembly
  assemblyIdentity type=win32 name=Microsoft.VC90.CRT
version=9.0.21022.8 processorArchitecture=x86
publicKeyToken=1fc8b3b9a1e18e3b/assemblyIdentity
/dependentAssembly
  /dependency
/assembly

Now i copied and renamed the result into httpd.exe.manifest and
executed a:

mt.exe -manifest:C:\Program Files\Apache Software Foundation
\Apache2.2\bin\httpd.exe.manifest -outputresource:C:\Program Files
\Apache Software Foundation\Apache2.2\bin\httpd.exe;1

This command embeds a manifest file (the one extracted from
python.exe) into httpd.exe (which has no, otherwise i would have
needed to merge).

After this the problem was resolved!

I will see over next days if this has some noticeable drawback,
otherwise it would be an acceptable solution (at least in my case).

regards and thanks for help, af


On Apr 30, 9:32 pm, Graham Dumpleton graham.dumple...@gmail.com
wrote:
 On 1 May 2011 03:38, Alejandro afrit...@gmail.com wrote:









  Hi,
  I have the following in httpd.conf:

  LoadModule wsgi_module modules/mod_wsgi.so

  WSGIScriptAlias /wsgi C:/temp/wsgi_test.py

  Directory C:/temp
  AllowOverride None
  Options None
  Order deny,allow
  Allow from all
  /Directory

  Which with a wsgi_test.py like:

  def application(environ, start_response):

     status = '200 OK'
     output = 'Hello World!'

     response_headers = [('Content-type', 'text/plain'), ('Content-
  Length', str(len(output)))]
     start_response(status, response_headers)

     return [output]

  works fine and returns Hello World, so i suppose that the basic things
  work ok.

  Now, if i add to the wsgi_test.py, a:

  from Crypto.Cipher import AES

  or

  import pywintypes

  i get loading errors, with Crypto for example:

  [Sat Apr 30 14:32:27 2011] [info] mod_wsgi (pid=3756): Create
  interpreter 'nb-alejandro.quipugmbh.com|/wsgi'.
  [Sat Apr 30 14:32:27 2011] [info] [client 127.0.0.1] mod_wsgi
  (pid=3756, process='', application='nb-alejandro.quipugmbh.com|/
  wsgi'): Loading WSGI script 'C:/temp/wsgi_test.py'.
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] mod_wsgi
  (pid=3756): Target WSGI script 'C:/temp/wsgi_test.py' cannot be loaded
  as Python module.
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] mod_wsgi
  (pid=3756): Exception occurred processing WSGI script 'C:/temp/
  wsgi_test.py'.
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] Traceback (most
  recent call last):
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1]   File C:/temp/
  wsgi_test.py, line 3, in module
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1]     from
  Crypto.Cipher import AES
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] ImportError: DLL
  load failed: The specified module could not be found.

  if i run running wsgi_test.py from command line it works fine, no
  complaints.

  I have googled quite a lot and there seem to be different
  explanations, the closest one to my problem apparently related to
  manifests and being stripped in latest python versions (http://
  bugs.python.org/issue4120) and apache not having any, but i am really
  confused if i am looking in the right direction.

  Any idea how to advance with this?

 The only solution is for the third party C extension (Crypto) to be
 built with a dependency on the required DLL. I am not a Windows 

Re: [modwsgi] Re: mod_wsqi + apache 2.2 + python 2.7.1 + Win 7: getting DLL load failed

2011-04-30 Thread Graham Dumpleton
On 1 May 2011 15:33, Alejandro afrit...@gmail.com wrote:
 Thanks Graham for the hint. I found a pycrypto compiled with MinGW and
 it worked. But I have similar issues with other modules so the problem
 was still there.

 Googling i found this post 
 http://psycopg.lighthouseapp.com/projects/62710/tickets/20#ticket-20-6

Yeah, that is what I meant, not SQLAlchemy. I knew it was database
related, but couldn't remember which.

Anyway, did not know you could embed a manifest file into Apache after
the fact. I'll look through this more properly later when have the
time and inclination and maybe document something about this
procedure.

Thanks.

Graham

 which explains quite clearly and deeply the issue and suggests that
 The ways to resolve the situation is to embed a manifest into apache
 or embed it into psycopg and the author then gets for the second. I
 have tried the first in order to solve the issue for all potential
 cases.

 I downloaded Microsoft Windows SDK, which includes mt.exe, Microsoft
 (R) Manifest Tool. With this i did a:

 mt.exe -inputresource:C:\Python26\python.exe;#1 -out:C:
 \Python26\extracted.python.exe.manifest

 Which exports the embedded manifest used in my current python.exe
 (which works ok with all modules).

 It looks like:

 ?xml version=1.0 encoding=UTF-8 standalone=yes?
 assembly xmlns=urn:schemas-microsoft-com:asm.v1
 manifestVersion=1.0
  trustInfo xmlns=urn:schemas-microsoft-com:asm.v3
    security
      requestedPrivileges
        requestedExecutionLevel level=asInvoker uiAccess=false/
 requestedExecutionLevel
      /requestedPrivileges
    /security
  /trustInfo
  dependency
    dependentAssembly
      assemblyIdentity type=win32 name=Microsoft.VC90.CRT
 version=9.0.21022.8 processorArchitecture=x86
 publicKeyToken=1fc8b3b9a1e18e3b/assemblyIdentity
    /dependentAssembly
  /dependency
 /assembly

 From here i stripped the trustInfo part and left just the dependency
 one:

 ?xml version=1.0 encoding=UTF-8 standalone=yes?
 assembly xmlns=urn:schemas-microsoft-com:asm.v1
 manifestVersion=1.0
  dependency
    dependentAssembly
      assemblyIdentity type=win32 name=Microsoft.VC90.CRT
 version=9.0.21022.8 processorArchitecture=x86
 publicKeyToken=1fc8b3b9a1e18e3b/assemblyIdentity
    /dependentAssembly
  /dependency
 /assembly

 Now i copied and renamed the result into httpd.exe.manifest and
 executed a:

 mt.exe -manifest:C:\Program Files\Apache Software Foundation
 \Apache2.2\bin\httpd.exe.manifest -outputresource:C:\Program Files
 \Apache Software Foundation\Apache2.2\bin\httpd.exe;1

 This command embeds a manifest file (the one extracted from
 python.exe) into httpd.exe (which has no, otherwise i would have
 needed to merge).

 After this the problem was resolved!

 I will see over next days if this has some noticeable drawback,
 otherwise it would be an acceptable solution (at least in my case).

 regards and thanks for help, af


 On Apr 30, 9:32 pm, Graham Dumpleton graham.dumple...@gmail.com
 wrote:
 On 1 May 2011 03:38, Alejandro afrit...@gmail.com wrote:









  Hi,
  I have the following in httpd.conf:

  LoadModule wsgi_module modules/mod_wsgi.so

  WSGIScriptAlias /wsgi C:/temp/wsgi_test.py

  Directory C:/temp
  AllowOverride None
  Options None
  Order deny,allow
  Allow from all
  /Directory

  Which with a wsgi_test.py like:

  def application(environ, start_response):

     status = '200 OK'
     output = 'Hello World!'

     response_headers = [('Content-type', 'text/plain'), ('Content-
  Length', str(len(output)))]
     start_response(status, response_headers)

     return [output]

  works fine and returns Hello World, so i suppose that the basic things
  work ok.

  Now, if i add to the wsgi_test.py, a:

  from Crypto.Cipher import AES

  or

  import pywintypes

  i get loading errors, with Crypto for example:

  [Sat Apr 30 14:32:27 2011] [info] mod_wsgi (pid=3756): Create
  interpreter 'nb-alejandro.quipugmbh.com|/wsgi'.
  [Sat Apr 30 14:32:27 2011] [info] [client 127.0.0.1] mod_wsgi
  (pid=3756, process='', application='nb-alejandro.quipugmbh.com|/
  wsgi'): Loading WSGI script 'C:/temp/wsgi_test.py'.
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] mod_wsgi
  (pid=3756): Target WSGI script 'C:/temp/wsgi_test.py' cannot be loaded
  as Python module.
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] mod_wsgi
  (pid=3756): Exception occurred processing WSGI script 'C:/temp/
  wsgi_test.py'.
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] Traceback (most
  recent call last):
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1]   File C:/temp/
  wsgi_test.py, line 3, in module
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1]     from
  Crypto.Cipher import AES
  [Sat Apr 30 14:32:27 2011] [error] [client 127.0.0.1] ImportError: DLL
  load failed: The specified module could not be found.

  if i run running wsgi_test.py from command line it works fine, no
  complaints.

  I have googled quite a lot and there seem to be