2013-01-23 73 views
2

親愛的兄弟, 我非常喜歡Django ORM,所以我試圖在Django Project本身之外使用它。但是當我嘗試使用它時,我遇到了一個問題。 這裏是我的Mac上我的文件結構:嘗試在Django之外使用ORM時出現「ImportError:No module named xxx」

testORM 
    |-- orm 
     |-- __init__.py 
     |-- models.py 
    |-- manage.py 
    |-- settings.py 
    |-- test.py 

這裏是我最簡單的代碼:

models.py:

from django.db import models 

class test(models.Model): 
    name = models.CharField(max_length=50) 
    class Meta: 
     db_table='test' 
     app_label='orm' 

manage.py:

import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'Portal',      # Or path to database file if using sqlite3. 
     'USER': 'postgres',      # Not used with sqlite3. 
     'PASSWORD': 'Cloud',     # Not used with sqlite3. 
     'HOST': 'localhost',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '5432',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

# Local time zone for this installation. Choices can be found here: 
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 
# although not all choices may be available on all operating systems. 
# In a Windows environment this must be set to your system time zone. 
TIME_ZONE = 'America/Chicago' 

INSTALLED_APPS = (
    'orm', 
) 

test.py:

import sys 
sys.path.append('/Users/wally/Documents/workspace/testORM') 
sys.path.append('/Users/wally/Documents/workspace/testORM/orm') 
import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") 

from django.core.management import setup_environ 
import settings 
setup_environ(settings) 

這裏是我,當我試圖從日食執行test.py:

Traceback (most recent call last): 
    File "/Users/wally/Documents/workspace/testORM/test.py", line 14, in <module> 
    setup_environ(settings) 
    File "/Library/Python/2.7/site-packages/django/core/management/__init__.py", line 433, in setup_environ 
    import_module(project_name) 
    File "/Library/Python/2.7/site-packages/django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named testORM 

但是,當我嘗試執行

python manage.py shell 
from django.db import connection 
cursor = connection.cursor() 

他們都在工作f ine從命令行!即使當我創建模型的對象並保存數據也可以正常工作時,通過外殼一切正常。

  • 但我不明白爲什麼它不工作,當我試圖從test.py執行 他們。我只是沒有開始在test.py中做任何事情, 只是導入設置。
  • 我搜索了網頁,有人通過將項目路徑添加到「sys.path」, 來解決問題,正如您所看到的,我是這樣做的,添加了硬編碼的完整路徑。但還是不行...
  • 有人能遇到這種情況嗎?我非常感謝,如果有人 可以幫助。感謝advace。
  • 注:我用我的Mac上(v10.8)python2.7和Django1.4
+0

試過添加一個sys.path.append('/ Users/wally/Documents/workspace')? – Aea

+0

我剛剛嘗試過,仍然不工作:( –

+0

腳本是否運行與您在命令行中鍵入'python'相同的python? –

回答

1

我創建所有這些文件複製到你的環境,並能產生這種錯誤。

python test.py開始工作時,我在testORM文件夾中創建了一個空的__init__.py文件。

+0

哦,是的,當我添加'__init __。py' unser「testORM」文件夾時,everthing終止了工作。謝謝sooooo psshanx。多麼愚蠢的是我錯過了那個文件... –

+1

問題是你不應該使用'setup_environ',因爲它試圖導入你的項目路徑,因此你收到的錯誤。我反對讓你的項目文件夾成爲一個python模塊,因爲一旦你的項目文件夾名稱發生變化,你就會有導入問題。 – bouke

+1

用於'項目文件夾的+1不應該是python模塊。這不是一個好習慣。 – pankaj28843