2010-11-24 22 views
3

J'ai une erreur bizarre où je peux importer la démarque en Python, et je peux importer la démarque en python dans le serveur de Django, mais je reçois la chose suivante en essayant d'importer la démarque dans l'application de gunicorn serveur.Impossible d'importer la démarcation à cause de COMMAND_LINE_LOGGING_LEVEL

* ImportError: ne peut pas importer le nom COMMAND_LINE_LOGGING_LEVEL

Cela est encore plus confuse parce que je trouvais le seul endroit où COMMAND_LINE_LOGGING_LEVEL est référencé dans démarquage (ou tout du code que je utilise) - une ligne, la définition, dans la démarque init .py, et je l'ai commenté. J'ai toujours cette erreur.

Des idées?

Répondre

2

Gunicorn, pour des raisons que je ne comprends pas encore, ajoute le répertoire virtualenv/bin au sys.path. Markdown installe un markdown.py dans ce répertoire bin. Markdown.py essaie d'importer COMMAND_LINE_LOGGING_LEVEL à partir de la marque de la bibliothèque. Cela entraîne une défaillance circulaire. Je ne sais pas pourquoi Gunicorn fait cela, et probablement il ne devrait pas. Mon confort solution est d'ajouter ce qui suit à la local_settings.py

import sys 
for i, path in enumerate(sys.path): 
    if path.endswith('bin'): 
     del sys.path[i] 
+0

Comment avez-vous résolu ce problème? –

+0

J'ai mis à jour ma réponse pour enregistrer ce que j'ai fait. – freyley

2

du serveur je fixe cette erreur en supprimant l'extension .py de markdown.py dans Whatever/bin. Cela l'a apparemment empêché de s'importer à la place du module markdown dans les packages de site.

+0

C'est probablement la mauvaise réponse pour plusieurs raisons. 1: Toute réinstallation de markdown entraînera la réapparition de markdown.py, ce qui causera des bugs sur la route. 2: Vraiment mauvais est la situation que j'ai (devenant plus commun) avec la configuration de système automatisée, bien que vous puissiez également automatiser la suppression du dossier. 3: markdown.py fournit une fonction utile, en ce sens qu'il s'agit de l'interface de ligne de commande à redimensionner, ce qui signifie que sa suppression peut entraîner la suppression de fonctionnalités pour certains utilisateurs ou plus tard. – freyley

+0

Bon points tous, mais j'ai rencontré cette erreur en dehors de tout type d'environnement gunicorn/django. Python regarde toujours d'abord dans le répertoire courant pour les importations (donc "import foo" dans un fichier nommé "foo.py" va s'importer au lieu de la bibliothèque "foo" que vous vouliez.) Dans mon cas il n'y a pas d'autre moyen ceci mais en modifiant "bin/markdown.py". – tkb

+0

Je pense en fait que c'est un bug dans la démarque. markdown.py dispose d'une routine de pré-import modifiant le sys.path, comme celle que vous avez écrite plus haut, mais ne s'exécute que sous Windows. Il vaudrait mieux le faire toujours. Je vais essayer de contacter le développeur. – tkb