2017-09-26 4 views
0

Je jouais avec une API RESTful de Flask/Python et tout allait bien jusqu'à ce que j'essaie d'apprendre à le servir. Bien sûr, j'ai essayé cela localement.Python 3.6 Flask avec mod_wsgi sous Windows: Aucun module nommé queue

J'ai installé AMPPS car il est livré avec python et mod_wsgi installé et activé par défaut. J'ai parcouru toutes les configurations et j'ai pu obtenir la valeur par défaut "Hello World!" application au travail. Huzzah! Droite?

Ensuite, j'ai essayé de commencer à apporter mon application et c'est là que j'ai frappé les barrages routiers. Dans un premier temps, je recevais une erreur indiquant qu'il n'y avait pas de module nommé flask. Après une lecture que j'ai appris que je dois charger mes virtualenv comme ceci:

activate_this = 'path/to/venv/Scripts/activate_this.py' 
with open(activate_this) as file_: 
    exec(file_.read(), dict(__file__=activate_this)) 

Cela a semblé fonctionner avec ballon, mais je suis arrivé:

ModuleNotFoundError: No module named 'queue'

J'ai écumé les interwebs et J'ai lu à propos de "queue" vs "Queue" mais je ne l'importe pas directement.

Voici le code que j'ai actuellement.

activate_this = 'path/to/venv/Scripts/activate_this.py' 
with open(activate_this) as file_: 
    exec(file_.read(), dict(__file__=activate_this)) 

# this line is what causes the error 
from flask import Flask 

def application(environ, start_response): 
    status = '200 OK' 
    output = b'Hello World!' 
    response_headers = [('Content-type', 'text/plain'),('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output] 

Toute aide serait appréciée.

Répondre

1

Votre mod_wsgi est réellement compilé pour Python 2.7, pas 3.6. L'erreur est que le module Queue a été renommé en queue en 3.6, donc lors de l'importation queue sous 2.7, il échouera.

Vous devrez désinstaller mod_wsgi et installer une version de si compilé pour Python 3.6. Vous ne pouvez pas forcer une version de mod_wsgi compilée pour une version Python à fonctionner en tant que version différente en la pointant vers un environnement virtuel Python d'une version différente. C'est parce que mod_wsgi est directement lié à la bibliothèque Python d'une version spécifique.

+0

Est-ce quelque chose qui est facile à faire? Je n'ai jamais fait ça avant. Je suis un débutant à python. – gin93r

+0

Aussi, il semble étrange que AMPPS viendrait avec python 3, et aurait la version 2.7 de mod_wsgi. – gin93r

+0

Envisagez de démarrer en exécutant le serveur WSGI sur la ligne de commande en utilisant mod_wsgi-express. De cette façon, vous n'avez pas besoin de toucher à la configuration du système Apache. Voir https://pypi.python.org/pypi/mod_wsgi et http://blog.dscpl.com.au/2015/04/introducing-modwsgi-express.html –