如何在调用Django Python shell时正确设置PYTHONPATH?

bweufnob  于 2023-10-21  发布在  Python
关注(0)|答案(4)|浏览(107)

我在Django 3项目中使用Python 3.9.9。我想通过“python3 www.example.com shell”调用我的Python shellmanage.py,所以我设置了这些变量。

$ echo $PYTHONSTARTUP
/home/myuser/cbapp/shell_startup.py
$ echo $PYTHONPATH/myuser
/home/myuser/cbapp/

我的启动脚本非常简单。

$ cat /home/myuser/cbapp/shell_startup.py 
from cbapp.services import *
from cbapp.models import *

然而,当我切换到我的项目目录,激活我的虚拟环境,并试图调用shell时,我得到了这些错误,抱怨无法找到Django。

$ cd /home/myuser/cbapp
$ ./venv/bin/activate
$ python3 manage.py shell
Traceback (most recent call last):
  File "/home/myuser/cbapp/manage.py", line 10, in main
    from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/myuser/cbapp/manage.py", line 21, in <module>
    main()
  File "/home/myuser/cbapp/manage.py", line 12, in main
    raise ImportError(
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?

但是,Django已经安装在我的虚拟环境中了。

$ ls /home/myuser/cbapp/venv/lib/python3.9/site-packages/django/
apps  conf     core  dispatch  http         __main__.py  __pycache__   template      test  utils
bin   contrib  db    forms     __init__.py  middleware   shortcuts.py  templatetags  urls  views

我还需要做什么才能成功启动shell?

643ylb08

643ylb081#

我认为你可以尝试在你的虚拟环境中重新安装Django,就像这样。

python3 -m pip install -U Django

如果你仍然遇到同样的错误,你必须在运行Python shell之前激活你的虚拟环境,所以首先运行这个:

source ./venv/bin/activate

检查PYTHONPATH环境变量是否设置正确。

echo $PYTHONPATH

如果输出是空的,你可以像这样手动设置它:

export PYTHONPATH=/home/myuser/cbapp/

好了,再测试一遍:

python3 manage.py shell
vs3odd8k

vs3odd8k2#

看起来你的venv工作不正常,建议删除它们并重新创建虚拟环境

  • virtualenv venv --python3={your desired interpreter}
  • 激活新的venv source activate venv/bin/acitvate后安装软件包
  • 请使用pip list | grep Django再次确认Django安装。如果找不到,请重新安装。
  • 检查manage.py有时,如果manage.py顶部的shebang #!/usr/bin/env python3指向全局Python而不是虚拟环境,则可能会导致问题。您可以删除shebang或确保虚拟环境在运行脚本时始终处于活动状态。
flmtquvp

flmtquvp3#

./venv/bin/activate-这将在子shell中执行venv虚拟环境,而不是在当前shell中。
documentation建议:

source ./venv/bin/activate

并确保您的PYTHONPATH包含Django安装的目录。如果Django安装在虚拟环境中,那么PYTHONPATH应该包含虚拟环境的site-packages目录的路径。但是,如果您已正确激活虚拟环境,则通常不需要设置PYTHONPATH
一旦你的虚拟环境被激活,你应该能够从你的Django项目的根目录(在你的例子中是/home/myuser/cbapp/)使用以下命令运行Django shell:

python3 manage.py shell

在虚拟环境中验证Django安装:python3 -m django --version。如果Django安装正确,此命令将返回Django的安装版本。
确保DJANGO_SETTINGS_MODULE环境变量设置正确。这个变量应该指向你的设置文件,通常格式为myproject.settings。您可以在shell中设置此变量,或将其添加到shell_startup.py文件中:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'cbapp.settings'
c7rzv4ha

c7rzv4ha4#

这里有一些步骤,我认为。
1.你需要安装python.exe,但在那个时候,你应该检查'checkBox'按钮,因为如果你不这样做,你需要设置env变量。但如果你检查一下,它会自动设置。
1.你需要在你的Django项目中安装venv文件,因为你需要在这个venv文件中安装所有的包。
1.之后,你需要进入虚拟环境来安装和运行项目。你可以运行这个命令'venv\scripts\activate.bat
这是我的拙见。谢谢.

相关问题