2013-11-02 15 views
5

Sto provando a far funzionare Django usando virtualenv. Ho già la pagina del mondo Ciao online. Tuttavia, sembra che ci sia qualcosa di sbagliato ora perché la maggior parte dei miei comandi mi danno lo stesso errore su myProject.settingsImpossibile importare le impostazioni; non sul percorso di sistema

(myenv)[email protected] /opt/myenv/myProject $ python manage.py startapp polls 
Traceback (most recent call last): 
    File "manage.py", line 13, in <module> 
    execute_from_command_line(sys.argv) 
    File "/opt/myenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line 
    utility.execute() 
    File "/opt/myenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/opt/myenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 263, in fetch_command 
    app_name = get_commands()[subcommand] 
    File "/opt/myenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 109, in get_commands 
    apps = settings.INSTALLED_APPS 
    File "/opt/myenv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__ 
    self._setup(name) 
    File "/opt/myenv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup 
    self._wrapped = Settings(settings_module) 
    File "/opt/myenv/local/lib/python2.7/site-packages/django/conf/__init__.py", line 134, in __init__ 
    raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
ImportError: Could not import settings 'myProject.settings' (Is it on sys.path?): No module named myProject.settings 
(myenv)[email protected] /opt/myenv/myProject $ 
+0

Condividi la struttura del tuo progetto. E inoltre, hai sincronizzato il tuo db? –

+0

Il progetto è molto semplice in questo momento. C'è solo la cartella MyProject in/opt/myenv con __init__, manage, settings, urls e wsgi. Ho sincronizzato il mio db (postgreSQL) e configurato il superutente. Per curiosità, ho eseguito di nuovo 'python manage.py syncdb' e mi ha dato lo stesso errore di cui sopra. Non sono sicuro di cosa ho cambiato nel mio setup ma ho avuto la pagina web di Django sul mio browser, quindi ho pensato di aver fatto tutto bene, ma apparentemente no. – onepiece

risposta

7

Il tuo settings.py deve essere importabile da python. Ciò può essere ottenuto in diversi modi:

  • Hai cartella contenente myProject nel vostro PYTHONPATH ambiente, cioè in sys.path, come dichiarato da @amyangfei

Nota che PYTHONPATH è una variabile di ambiente di sistema usato da Python a costruisci questo sys.path e la sua modifica è dipendente da OS. Per Mac OS, vedere this reference, per Windows this. Notare che PYTHONPATH si utilizza solo per creare sys.path e che la sua modifica con os.environ['PYTHONPATH']=<some_new_value> non ha l'effetto significativo.

Tuttavia, è possibile modificare sys.path al volo, per aiutare modulo import trovare pacchetti necessari, vedere l'esempio seguente:

$ mkdir /tmp/tst 
$ echo "print 'test'" > /tmp/tst/__init__.py 
$ python -c "import tst" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: No module named tst 
$ python -c "import os; os.environ['PYTHONPATH']+=';/tmp'; import tst;" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: No module named tst 
$ python -c "import sys; sys.path.append('/tmp'); import tst;" 
test 
$ export PYTHONPATH=$PYTHONPATH:/tmp/ 
$ python -c "import tst" 
test 
  • è possibile eseguire il python manage.py da una cartella contenente myProject.

Per questi ultimi di lavorare, la struttura del progetto deve quindi essere come segue:

manage.py 
myProject/ 
    settings.py 
  • ultima opzione, se il vostro manage.py e settings.py risiedono nella stessa posizione, l'ambiente cambiamento variabile DJANGO_SETTINGS_MODULE a settings anziché myProject.settings oppure eseguire python manage.py con argomenti --settings=settings.
+0

Ho provato la tua seconda opzione, non c'era più nessun errore quindi va bene. Non capisco la prima soluzione. L'ho trovato quando ho cercato di risolvere l'errore, ma non capisco cosa/come accedere a PYTHONPATH e alla sua relazione con sys.path. Ho visto questo sys.path.append ('/ percorso/a/MyProject') quindi presumo che aggiunga percorsi a PYTHONPATH in modo che python sappia dove collegare. Potresti spiegare ancora una volta la prima soluzione e dare passaggi più specifici in modo che possa funzionare allo stesso modo della seconda soluzione? Grazie – onepiece

+0

aggiornato la mia risposta, spero che aiuti – alko

+0

Quindi dovrei aggiungere "sys.path.append ('/ folder/contain/settings.py');" in qualche file? Non sono sicuro di quale file sia il – onepiece

1

controllo se '/opt/myenv/myProject' è in tuo sys.path pitone. (fare riferimento a python doc: sys.path [0], è la directory che contiene lo script che è stato utilizzato per invocare l'interprete Python. Se la directory di script non è disponibile (ad esempio se l'interprete viene richiamato in modo interattivo o se lo script viene letto dallo standard input), percorso [0] è la stringa vuota) (http://docs.python.org/2/library/sys.html#sys.path)

➜ mysite python 
Python 2.6.8 (unknown, Aug 25 2013, 00:04:29) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> print sys.path 
['', '/Users/xxx/xxx/', ... ] 

domande simili qui: ImportError: Could not import settings, Could not import settings 'myproject.settings' (Is it on sys.path?): No module named pinax

4

hai provato qualcosa di simile? Forse funzionerà.

python manage.py startapp polls --settings=myProject.settings 
+0

ha già 'settings_module' uguale a quel valore – alko

+0

che ha fatto! grazie Marc – doniyor

Problemi correlati