HOWTO: “psycopg2 module: cannot import name tz”

1 minute read

Già ho scritto a riguardo di postgres + psycopg2 + django e nell’utilizzo (dunque la compilazione è andata a buon fine) di psycopg2 con django puoi incappare in un errore del genere:

raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)      
ImproperlyConfigured: Error loading psycopg2 module: cannot import name tz

Ho cercato molto in giro e non ho mai trovato una soluzione a questo errore, finché la mia perseveranza ha trovato un’uscita. Praticamente questo errore è scaturito poiché il tuo server non riesce a scrivere sul path PYTHON_EGG_CACHE e di conseguenza non può usare le eggs.
Il vero fix e però nella configurazione del tuo mod_python o del mod_wsgi, in modo da configurare questo path.
Per il mod_wsgi, modifica il file .wsgi del tuo progetto aggiungendoci questa riga:

os.environ['PYTHON_EGG_CACHE'] = '/writable/path/.python-eggs'

Dove il path che vai ad inserire è scrivibile dall’utente che esegue il web server come, ad esempio, www-data.

Per quanto riguarda mod_python segui questi due passaggi:

  1. Crea un piccolo modulo python “eggs.py” e mettici dentro queste due righe:

    import os  
    os.environ['PYTHON_EGG_CACHE'] = '/home/django/.python-eggs'
    
  2. Nel file del tuo virtualhost aggiungi le seguenti direttive:

    PythonInterpreter my_django  
    PythonImport /path/to/my/profile/eggs.py my_django
    

Sia per mod_wsgi sia per mod_python, a modifiche finite riavvia il tuo server web e controlla se tutto funziona correttamente.

Come al solito se hai domande, suggerimenti, critiche, altro… scrivimi oppure commenta il post! :)

Fonte: lethain.com

Comments