Impossible d'importer le module

J'ai créé une application web en python avec cette structure de répertoire:

# cd /usr/local/www/myapp

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

J'ai réglé mon PYTHONPATH à:

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

Dans myapp.wsgi j'essaie de faire:

import layout

Mais je suis arriver erreur Interne du serveur. Pourquoi?

C'est mon myapp.wsgi (si j'ai supprimer l'importation disposition de la ligne, il fonctionne):

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]

Plein de message d'erreur que j'obtiens:

Internal Server Error

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

Please contact the server administrator, webmaster@example.com 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.

Mon virtualhost configuration:

<VirtualHost *:80>

    ServerName localhost
    ServerAlias localhost
    ServerAdmin webmaster@example.com

    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>

D'erreur dans /var/log/httpd-erreur.journal:

[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

Sortie de print sys.chemin d'accès:

Impossible d'importer le module

  • Au moins inclure le plein et le message d'erreur exact que vous obtenez.
  • La façon dont vous exécutez le serveur web? Il est fort probable que vous n'utilisez pas votre environnement, afin de réglage PYTHONPATH pour votre propre coque ne va pas aider.
  • Je suis à l'aide d'Apache mod_wsgi et j'ai créé un virtual host pour /usr/local/www/myapp.
  • Ajouté le message d'erreur que j'obtiens dans le navigateur et ma configuration d'un hôte virtuel.
  • Le message d'erreur que vous avez posté n'est pas le message d'erreur nous sommes à la recherche pour---comme il le note, vérifiez le journal des erreurs du serveur. Pour un Look python "Traceback". Aussi, je me demande si vous êtes simplement en spécifiant l'importation de manière incorrecte. Si layout.py contient le code qui vous intéresse, vous devez faire import layout.layout ou from layout import layout.
  • J'ai ajouté erreur de var/log/httpd-erreur.journal. J'ai aussi essayé d'importation de mise en page.mise en page, mais il jette la même erreur.
  • J'avais parié sur @Wooble de la théorie de l'---le serveur est en utilisant un autre PYTHONPATH. Essayez d'imprimer de journalisation/ sys.path à partir de votre script à voir (vous aurez besoin de import sys premier).
  • J'ai ajouté de la sortie de print sys.chemin d'accès à ma question.
  • La chose est d'obtenir votre script pour imprimer/log sys.chemin d'accès lorsque le script est exécuté par le serveur web. Si le modules dir n'est pas une partie de sys.path, puis import layout échouera. Notez que le modules dir n'est pas dans votre sys.path exemple.

InformationsquelleAutor Richard Knop | 2012-01-20