sys.path不添加django应用程序

时间:2011-07-30 14:39:29

标签: django

我在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

错误在哪里。

谢谢。问候。

3 个答案:

答案 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)

首先,为什么要将您的应用程序放在名为nginxhtml的目录中?它既不是。

其次,目前尚不清楚你的问题是什么。您似乎进入shell,向sys.path添加内容,然后再次退出shell。这将永远不会有效:对sys.path的修改仅适用于该会话。如果您想在路径中添加内容,请在每次启动服务器时执行此操作 - 例如修改manage.py - 或将其添加到PYTHONPATH环境变量。

答案 2 :(得分:0)

解决方案位于 settings.py

INSTALLED_APPS = (
...
'mysite.testapp',   

因为我使用项目 mysite 和应用程序 testapp