python - tutorial - Django Shell No hay módulo llamado ajustes
django templates examples (10)
He desplegado Django a Apache a través de mod_wsgi
. Django está funcionando bien cuando está alojado desde Apache. Sin embargo, estoy intentando hacer un mantenimiento a través de manage.py
, pero cuando intento ejecutarlo, manage.py
el error:
Error: No se pudieron importar las configuraciones ''myproject.settings'' (¿Está en sys.path?): No hay configuraciones con nombre de módulo
user@localhost:~$ cd /usr/local/myproject
user@localhost:/usr/local/myproject$ ls
drwxr-xr-x 2 apache apache 4096 2011-09-07 19:38 apache
-rw-r--r-- 1 apache apache 0 2011-05-25 14:52 __init__.py
-rw-r--r-- 1 apache apache 813 2011-09-09 16:56 manage.py
drwxr-xr-x 6 apache apache 4096 2011-09-09 16:43 myapp
-rw-r--r-- 1 apache apache 4992 2011-09-07 19:31 settings.py
drwxr-xr-x 4 apache apache 4096 2011-09-08 20:32 templates
-rw-r--r-- 1 apache apache 1210 2011-09-08 14:49 urls.py
Django parece estar ignorando la variable de entorno DJANGO_SETTINGS_MODULE.
user@localhost:~$ cd /usr/local/myproject
user@localhost:/usr/local/myproject$ export DJANGO_SETTINGS_MODULE=settings
user@localhost:/usr/local/myproject$ python manage.py shell
Error: Could not import settings ''myproject.settings'' (Is it on sys.path?): No module named settings
user@localhost:/usr/local/myproject$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import settings
>>>
Solo para confirmar que no me estaba volviendo loco, comenté todo dentro de manage.py, excepto la línea de import settings
, y funcionó correctamente.
También he intentado configurar os.environ[''DJANGO_SETTINGS_MODULE''] = ''settings''
y sys.path.append(''/usr/local/myproject'')
directamente en la parte superior de manage.py, sin ningún resultado.
¿Que está pasando aqui? ¿Por qué Django usa el nombre del módulo de configuración incorrecto? Esto me está volviendo loco.
Aunque la respuesta de Simon Whitaker (que un directorio con el mismo nombre confunde las cosas) es ciertamente acertada, en lugar de sugerirle que cambie toda su estructura de directorio existente, podría sugerir:
En lugar de utilizar el "mal funcionamiento" / ambiguo ...
import settings
... use el más específico ...
from django.conf import settings
De alguna manera, si su carpeta de proyecto tiene el mismo nombre que la aplicación que tiene el archivo de configuración, y si tiene __init__.py
en la carpeta raíz del proyecto, esto generará errores en wsgi. Realmente no entiendo por qué, pero eliminar este archivo resolvió esto por mí.
En mi caso, el archivo wsgi.py funcionaba cuando el sistema se ejecutaba normalmente, pero obtenía ImportError cuando intentaba ejecutar un comando manual manage.py como migrate o collectstatic.
Revisé wsgi.py por la forma en que importa la configuración y noté que primero agrega la ruta de configuración a la sys.path de la siguiente manera:
import sys
sys.path.append(''/opt/server/settings'')
Agregué eso a la parte superior de manage.py y funciona.
Esto puede suceder si el nombre de su directorio raíz es el mismo que el nombre de una de sus aplicaciones. Por ejemplo, aquí tengo un directorio llamado bar
contiene un proyecto de Django con una aplicación también llamada bar
:
Simons-MacBook-Pro ~/temp
$ cd bar
Simons-MacBook-Pro ~/temp/bar
$ ./manage.py shell
Error: Could not import settings ''bar.settings'' (Is it on sys.path?): No module named settings
Simons-MacBook-Pro ~/temp/bar
$ ls -l
total 48
-rw-r--r-- 1 simon staff 0 25 Oct 10:46 __init__.py
-rw-r--r-- 1 simon staff 130 25 Oct 10:46 __init__.pyc
drwxr-xr-x 7 simon staff 238 25 Oct 10:46 bar
-rwxr-xr-x 1 simon staff 503 25 Oct 10:46 manage.py
-rw-r--r-- 1 simon staff 5025 25 Oct 10:46 settings.py
-rw-r--r-- 1 simon staff 2658 25 Oct 10:46 settings.pyc
-rw-r--r-- 1 simon staff 556 25 Oct 10:46 urls.py
Cambiar el nombre del directorio raíz a foo
(o cualquier otra cosa que no sea bar
) resuelve el problema:
Simons-MacBook-Pro ~/temp/bar
$ cd ..
Simons-MacBook-Pro ~/temp
$ mv bar foo
Simons-MacBook-Pro ~/temp
$ cd foo
Simons-MacBook-Pro ~/temp/foo
$ ./manage.py shell
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
Había cambiado accidentalmente mi variable DJANGO_SETTINGS_MODULE
usando el comando echo DJANGO_SETTINGS_MODULE=mysite.settings
: echo DJANGO_SETTINGS_MODULE=mysite.settings
Simplemente salí de virtualenv y lo activé de nuevo, lo que restauró mi configuración.
Parece que el camino a su proyecto no está siendo reconocido por wsgi. Esto me ha sucedido, y para resolverlo, agregué esto a la parte superior de mi archivo .wsgi:
import os
import sys
root_path = os.path.abspath(os.path.split(__file__)[0])
sys.path.insert(0, os.path.join(root_path, ''project_name''))
sys.path.insert(0, root_path)
Si está utilizando wsgi / uwsgi en producción ...
Estaba teniendo el mismo error:
Si cambió el nombre de la carpeta que creó django startproject que tiene archivos setting.py y wsgi.py, verifique en el archivo wsgi.py la línea: os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<your_folder_name>.settings")
En mi caso tuve que cambiar el nombre también a <your_folder_name>.
Tuve un problema similar, donde se estaba devolviendo el mismo error cuando intenté ejecutar django-admin.py startproject myapp
. Una respuesta anterior aquí me ayudó a resolverlo. El problema era que anteriormente había apuntado a DJANGO_SETTINGS_MODULE
a un determinado archivo, que más tarde eliminé. Para solucionarlo, acabo de quitar el puntero con este comando:
export DJANGO_SETTINGS_MODULE=
Verifique la compatibilidad entre la versión virtualenv y la versión django. cuando coincide, funciona como una gema.
Ya que su aplicación web está funcionando, verifique que esté ejecutando manage.py
con el mismo intérprete de Python que está definido en su archivo .wsgi (y si agrega otros directorios a sys.path en su archivo .wsgi, asegúrese de que estén en el pythonpath aquí también).
Si intenta importar algo en su archivo de configuración que lanza un error de importación, Django le dice que la configuración no se puede importar. Las versiones más recientes de django mencionarán (If the file settings.py does indeed exist, it''s causing an ImportError somehow.)
y me he encontrado con esto unas cuantas veces.
Si no es eso, tal vez intente usar django-admin.py en su lugar, en caso de que algo haya fallado en su archivo manage.py. AFAIK no hay una buena razón para modificar manage.py directamente.