我在Windows XP下使用django 1.3.0并使用Python 2.7 ...
这是我尝试在sys.path
上添加路径django应用程序C:\nginx-1.0.5\html\mysite>python
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['', 'C:\\Python27\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C
:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\P
ython27\\lib\\site-packages']
>>> sys.path = ['C:\\nginx-1.0.5\\html\\mysite'] + sys.path
>>> print sys.path
['C:\\nginx-1.0.5\\html\\mysite', '', 'C:\\Python27\\python27.zip', 'C:\\Python2
7\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib
\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages']
>>> import testapp
>>> ^Z
C:\nginx-1.0.5\html\mysite>python manage.py runserver 8080
Error: No module named testapp
C:\nginx-1.0.5\html\mysite>python
Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['', 'C:\\Python27\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C
:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\P
ython27\\lib\\site-packages']
>>>
django应用程序位于文件夹:
C:\nginx-1.0.5\html\mysite\testapp
我用以下方法创建:
C:\nginx-1.0.5\html\mysite>python manage.py startapp testapp
错误在哪里。
谢谢。问候。
答案 0 :(得分:1)
我认为你可能在理解导入如何与PYTHONPATH相关方面遇到一些问题。 PYTHONPATH是sys.path的路径列表。
直接包含在sys.path中列出的路径中的任何模块都可用作顶级导入。如果你有包(文件夹),它们必须包含一个__init__.py
文件才能导入,除非它们直接在PYTHONPATH上。
现在,除了sys.paths中包含的默认路径之外,还包括执行第一个python文件的路径。例如:
c:\myapp\my_app.py
\my_module.py
> python my_app.py
>>> import sys
>>> sys.path
...,"c:\myapp\"...
在django的上下文中,这意味着当您运行manage命令时,您的manage.py文件所在的目录也包含在PYTHONPATH中。这在您的情况下似乎很重要,因为看起来您的manage.py文件中的任何文件夹都不会直接包含您的testapp目录。
/path/to/project/
manage.py
settings.py
mysite/
__init__.py
testapp/
__init__.py
models.py
在上面的目录结构中,如果运行命令:
python /path/to/project/manage.py shell
>>> import mysite.testapp
>>> import testapp
--- failure ---
原因是testapp没有直接包含在sys.paths中列出的任何路径中。但是,mysite是。
您可以像这样更改目录结构:
/path/to/mysite/
manage.py
settings.py
__init__.py
testapp/
__init__.py
models.py
python /path/to/mysite/manage.py shell
>>> import testapp
>>> import mysite.testapp
--- failure ---
现在testapp直接在sys.path上,可以作为顶级模块导入。
答案 1 :(得分:0)
首先,为什么要将您的应用程序放在名为nginx
和html
的目录中?它既不是。
其次,目前尚不清楚你的问题是什么。您似乎进入shell,向sys.path
添加内容,然后再次退出shell。这将永远不会有效:对sys.path
的修改仅适用于该会话。如果您想在路径中添加内容,请在每次启动服务器时执行此操作 - 例如修改manage.py
- 或将其添加到PYTHONPATH
环境变量。
答案 2 :(得分:0)
解决方案位于 settings.py
下INSTALLED_APPS = (
...
'mysite.testapp',
因为我使用项目 mysite 和应用程序 testapp