By adding one statement import pyodbc causes Internal Server Error in Apache HTTP Server

218 Views Asked by At

To run the normal school old python file in Apache Server. I had coded this way

index.html

<form action="/cgi-bin/hello_get.py" method="post">
First Name: <input type="text" name="first_name">  <br />

Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

hello_get.py

#!C:/Users/Desktop/AppData/Local/Programs/Python/Python36-32/python

# Import modules for CGI handling
import cgi, cgitb
import pyodbc

# Create instance of FieldStorage
form = cgi.FieldStorage()

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')

print("Content-Type:text/html\r\n\r\n")
print("<html>")
print("<head>")
print("<title>Hello - Second CGI Program</title>")
print("</head>")
print("<body>")
print("<h2>Hello %s %s</h2>" % (first_name, last_name))
print("</body>")
print("</html>")

I have tried to run in python shell. It perfectly works

Also in httpd.conf file:

 LoadModule pyodbc_module "c:/users/desktop/appdata/local/programs/python/python36-32/lib/site-packages/pyodbc.cp36-win32.pyd"

Results

 httpd: Syntax error on line 571 of C:/Apache24/conf/httpd.conf: Can't
 locate API module structure `pyodbc_module' in file
 C:/Users/Desktop/AppData/Local/Programs/Python/Python36-32/Lib/site-packages/pyodbc.cp36-win32.pyd:
 No error

So How do I need to import pyodbc in .py file as well as how to load pyodbc module in Apache HTTP server?

As @FlipperPA said to load mod_wsgi module in this link Click Here

C:\>pip install mod_wsgi-4.5.22+ap24vc9-cp27-cp27m-win32.whl

C:\Windows\system32>pip install htmlpy
Collecting htmlpy
  Downloading htmlPy-2.0.3.tar.gz
Installing collected packages: htmlpy
  Running setup.py install for htmlpy ... done
Successfully installed htmlpy-2.0.3

Also in httpd.conf file:

LoadFile "c:/users/desktop/appdata/local/programs/python/python36-32/python36.dll"
LoadModule wsgi_module "c:/users/desktop/appdata/local/programs/python/python36-32/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win32.pyd"
LoadModule pyodbc_module "c:/users/desktop/appdata/local/programs/python/python36-32/lib/site-packages/pyodbc.cp36-win32.pyd"
WSGIPythonHome "c:/users/vitriv-desktop/appdata/local/programs/python/python36-32"

This is test_wsgi.py

#!C:/Users/AppData/Local/Programs/Python/Python36-32/python

import os
import sys
from wsgiref.simple_server import make_server


def hello_world_app(environ, start_response):
    status = '200 OK' # HTTP Status
    headers = [('Content-type', 'text/plain')] # HTTP Headers
    start_response(status, headers)
    pyver = '.'.join(map(str, tuple(sys.version_info)[:3]))
    return ["Hello World (from Python %s WSGI)" % pyver]


application = hello_world_app


if __name__ == '__main__':
    port = int(os.getenv('PORT', '8000'))
    srv = make_server('127.0.0.2', port, application)
    print("Serving...")
    srv.serve_forever()

Output:

Hello World (from Python 2.7.14 WSGI)

But I'm not aware how to use Web Server Gateway Interface now?
Kindly help me to resolve atleast one method from the above two methods

0

There are 0 best solutions below