2012-01-20 38 views
6

आयात नहीं कर सकता मैं इस निर्देशिका संरचना के साथ एक अजगर वेब एप्लिकेशन बनाया है:मॉड्यूल

# cd /usr/local/www/myapp 

modules 
    layout 
     __init__.py 
     layout.py 
packages 
public 
myapp.wsgi 

मैं अपने PYTHONPATH निर्धारित किया है:

/usr/local/www/myapp/modules:/usr/local/www/myapp/packages 

myapp.wsgi में मैं करने की कोशिश:

import layout 

लेकिन मैं आंतरिक सर्वर त्रुटि हो रही है। क्यूं कर?

यह मेरा myapp.wsgi है (अगर मैं आयात लेआउट लाइन निकालने के लिए, यह काम करता है):

import sys 
import wsgiref 
import layout  
def application(environ, start_response): 
     response_status = '200 OK' 
     response_body = 'Hello! ' 
     response_headers = [] 
     content_type = ('Content-type', 'text-plain') 
     content_length = ('Content-Length', str(len(response_body))) 
     response_headers.append(content_type) 
     response_headers.append(content_length) 
     start_response(response_status, response_headers) 
     return [response_body] 

पूर्ण त्रुटि संदेश मैं हो रही है:

Internal Server Error 

The server encountered an internal error or misconfiguration and was unable to complete your request. 

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error. 

More information about this error may be available in the server error log. 

मेरे वर्चुअलहोस्ट विन्यास:

<VirtualHost *:80> 

    ServerName localhost 
    ServerAlias localhost 
    ServerAdmin [email protected] 

    DocumentRoot /usr/local/www/myapp/public 

    <Directory /usr/local/www/myapp/public> 
    Order allow,deny 
    Allow from all 
    </Directory> 

    WSGIScriptAlias//usr/local/www/myapp/myapp.wsgi 

    <Directory /usr/local/www/myapp> 
    Order allow,deny 
    Allow from all 
    </Directory> 

</VirtualHost> 

/var/log/httpd-error.log से त्रुटि:

प्रिंट sys.path की
[Fri Jan 20 15:31:03 2012] [error] [client 192.168.201.123] mod_wsgi (pid=1725): Target WSGI script '/usr/local/www/myapp/myapp.wsgi' cannot be loaded as Python module. 
[Fri Jan 20 15:31:03 2012] [error] [client 192.168.201.123] mod_wsgi (pid=1725): Exception occurred processing WSGI script '/usr/local/www/myapp/myapp.wsgi'. 
[Fri Jan 20 15:31:03 2012] [error] [client 192.168.201.123] Traceback (most recent call last): 
[Fri Jan 20 15:31:03 2012] [error] [client 192.168.201.123] File "/usr/local/www/myapp/myapp.wsgi", line 3, in <module> 
[Fri Jan 20 15:31:03 2012] [error] [client 192.168.201.123]  import layout 
[Fri Jan 20 15:31:03 2012] [error] [client 192.168.201.123] ImportError: No module named layout 

आउटपुट:

enter image description here

+1

कम से कम पूर्ण और सटीक त्रुटि संदेश आपको प्राप्त हो रहा है। – unwind

+0

आप वेब सर्वर कैसे चला रहे हैं? यह संभवतः आपके पर्यावरण का उपयोग नहीं कर रहा है, इसलिए अपने स्वयं के खोल के लिए पायथनपैथ को स्थापित करने में मदद नहीं मिलेगी। – geoffspear

+0

मैं अपाचे mod_wsgi का उपयोग कर रहा हूं और मैंने/usr/local/www/myapp के लिए वर्चुअल होस्ट बनाया है। –

उत्तर

8

पहला प्रयास:

python /usr/local/www/myapp/myapp.wsgi 

इसे सही ढंग से लोड होता है?

यदि हाँ, तो शायद आप (~/.bashrc या ऐसे में) कुछ वातावरण है, जो आपके ऐप्लिकेशन के लिए आवश्यक है। आज़माएं ::

# to wipe-out extra env 
env -i bash 
# try again 
python /usr/local/www/myapp/myapp.wsgi 

सत्यापित करें कि आप अपने खोल में उसी पायथन का उपयोग करें जैसे कि अपाचे डब्लूएसजीआई द्वारा उपयोग किया जाता है।

अपने myapp.wsgi किसी भी अतिरिक्त env की जरूरत है सही ढंग से लोड करने के लिए है, तो आप में से एक कर सकते हैं:

  • अपाचे में python path सेट करें, या
  • अपने myapp.wsgi में क्रम में सेट

अपने WSGI कोड में में सेट करने के लिए, यहाँ उदाहरण कोड है।

import os, sys 
EXTRA_DIR = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..')) 
if EXTRA_DIR not in sys.path: 
    sys.path.append(EXTRA_DIR) 

अपनी myapp.wsgi फ़ाइल की शुरुआत में रखें।

+0

मैंने उन सभी की कोशिश की। कुछ भी काम नहीं किया। env -i bash काम नहीं करता है क्योंकि मैं फ्रीबीएसडी का उपयोग कर रहा हूं। –

+0

यदि आप 'env -i' नहीं कर सकते हैं तो मैन्युअल रूप से अपने पर्यावरण' env' कमांड और अपनी प्रोफ़ाइल स्क्रिप्ट का निरीक्षण करें। क्या आप वर्चुअलएन्व या ऐसे का उपयोग करते हैं? –

+0

'पायथन/usr/local/www/myapp/myapp.wsgi' का आउटपुट क्या है? –

1

आप अपने layout फ़ोल्डर में __init.__py है, लेकिन यह __init__.py होना चाहिए। अवधि गुम हो गई है। मुझे यकीन है कि अगर यह अपनी पोस्ट या नहीं में कोई गलती है, लेकिन है कि यदि आपकी फ़ाइल कैसा दिखाई देता है यह इस समस्या का कारण होता है नहीं कर रहा हूँ।

+0

यह सिर्फ एक टाइपो है। माफ़ कीजिये। –

0

मॉड्यूल निर्देशिका भी एक __init__.py फ़ाइल एक पैकेज के रूप में परिभाषित किया जाना चाहिए।

+1

'मॉड्यूल' एक पैकेज नहीं है (संकेतित 'पायथनपथ' पर आधारित)। – jrennie

0

मैं ने वही समस्या थी और यह इसे हल:

chmod a+x myapp.wsgi 
0

http://webpy.org/install#apachemodwsgi

If you get an "ImportError: No module named web" in your apache error.log file, you could try setting the absolute path in code.py before importing web:

import sys, os 
abspath = os.path.dirname(__file__) 
sys.path.append(abspath) 
os.chdir(abspath) 
import web 

यह मेरे लिए नाटकीय रूप से काम करता है के अनुसार।

संबंधित मुद्दे