【发布时间】:2020-09-29 08:01:30
【问题描述】:
我需要帮助来解决当我尝试使用 Django 代码运行任何 python 脚本时出现的错误。
这是错误:
****PS C:\Users\pebr6\Desktop\tutorial> & c:/Users/pebr6/Desktop/pythonEnvironments/1.0/Scripts/Activate.ps1
(1.0) PS C:\Users\pebr6\Desktop\tutorial> & c:/Users/pebr6/Desktop/pythonEnvironments/1.0/Scripts/python.exe c:/Users/pebr6/Desktop/tutorial/aplicaciones/principal/models.py
Traceback (most recent call last):
File "c:/Users/pebr6/Desktop/tutorial/aplicaciones/principal/models.py", line 5, in <module>
class Person(models.Model):
File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\db\models\base.py", line 107, in __new__
app_config = apps.get_containing_app_config(module)
File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\apps\registry.py", line 252, in get_containing_app_config
self.check_apps_ready()
File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\apps\registry.py", line 134, in check_apps_ready
settings.INSTALLED_APPS
File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\conf\__init__.py", line 76, in __getattr__
self._setup(name)
File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\conf\__init__.py", line 57, in _setup
raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before acces**sing settings.******
我的项目结构如下:
这是我在 settings.py 上的应用配置:
应用定义
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'aplicaciones.principal',
]
manage.py 文件里面有下面的代码:
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
最后一个,我的 wsgi.py 文件:
import os
import sys
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings')
application = get_wsgi_application()
sys.path.append('C:/Users/pebr6/Desktop/pythonEnvironments/1.0/Scripts/python.exe')
我的 python 版本是 3.8.3 用于 64 位窗口,我正在使用 virtualenv 创建不同的 python 环境。
全局环境开启:
C:\Users\pebr6\AppData\Local\Programs\Python\Python38\python.exe
我只是在这里安装了 virtualenv。
我的项目的虚拟环境在路径上:
c:\Users\pebr6\Desktop\pythonEnvironments\1.0\Scripts\python.exe
我这里安装了 django 和 django rest 框架。
我开始一个项目的步骤(例如)是:
创建文件夹(教程为实例)。
在教程文件夹中,我创建了另一个名为 env 的文件夹,在这里我使用 windows cmd 上的 virtualenv 1.0 创建了一个虚拟环境。
-
创建后,我切换到该环境并使用以下命令安装 django 和 django rest 框架:
pip install django
pip install djangorestframework
或
python -m pip install django
python -m pip install djangorestframework
-
然后,在教程文件夹中,我也使用以下方法创建了一个项目:
django-admin startproject 教程。
-
在此之后,我使用命令创建了一个应用程序:
manage.py startapp main
我也试过了:
django-admin startapp main
或
python manage.py startapp main
- 当我在 VS Code 上打开教程文件夹(包含 env、project 和 app 文件夹)时,IDE 要求我设置解释器,因此我在计算机上搜索以在我的虚拟环境路径中找到 python.exe:
c:\Users\pebr6\Desktop\pythonEnvironments\1.0\Scripts\python.exe
所以 settings.json 变成了这样:
"python.pythonPath": "c:\Users\pebr6\Desktop\pythonEnvironments\1.0\Scripts\python.exe"
- 最后我尝试在models.py或test.py上写一些代码,或者创建一个serializers.py并开始编码。当我运行任何脚本时,它都会引发异常。
从 64 位版本卸载 32 位的 python 3.8.3 版本后,错误开始发生。 我再次尝试全部卸载,我已经使用 virtualenv 在全局或虚拟环境中使用了这两个版本,并且错误仍然存在。
我不知道这是否重要,但这就是我在虚拟环境路径上的内容(我猜是我的 PYTHONPATH,不太确定):
我尝试打开 manage.py shell 并运行命令:
导入系统
sys.path.append("c:\Users\pebr6\Desktop") 或 sys.path.append("c:\Users\pebr6\Desktop\tutorial")
但没有任何变化。
我希望有人可以帮助我解决这个问题,因为我是 python 新手,但我还不了解很多东西。谢谢!
【问题讨论】:
-
您正在尝试执行您的
models.py脚本? -
您应该在
tests.py上进行测试并使用python manage.py test运行它,您不应该运行models.py或任何其他脚本。 -
是的,我按照这个链接上的步骤django-rest-framework.org/tutorial/1-serialization
-
在下面查看我的回答,它将指出您需要遵循的内容。
-
首先我创建一个从models.Model扩展的类,然后创建序列化程序。一旦我这样做了,我将两者都导入到我的 test.py 并在那里,我从 MyClass(models.Model) 创建一个对象,并将序列化器也创建为 MyClassSerializer(MyClass)。最后,尝试查看生成 json 的数据并查看是否一切正常。但是自从我的models.py上的 class MyClass(models.Model): 行以来,异常一直存在
标签: python django python-3.x django-rest-framework