我创建了一个django项目,搭建了一个虚拟环境,用
poetry add
添加了django。
在 pyproject.toml 中:
[tool.poetry.dependencies]
python = "^3.9"
psycopg2-binary = "^2.9.3"
Django = "^4.0.1"
我在 venv 里面跑
poetry show
:
asgiref 3.5.0 ASGI specs, helper code, and adapters
django 4.0.1 A high-level Python web framework that encourages rapid development and clean, pragmatic design.
psycopg2-binary 2.9.3 psycopg2 - Python-PostgreSQL Database Adapter
sqlparse 0.4.2 A non-validating SQL parser.
当我运行命令创建应用程序时:
p manage.py startapp users apps/users
我得到这个错误:
(base) ┌──(venv)─(tesla㉿kali)-[~/Documents/projects/graphql/graphenee]
└─$ p 1 ⨯
Python 3.9.7 (default, Sep 16 2021, 13:09:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'django'
>>>
venv 已设置,已激活,已安装 django,但我仍然收到此错误。在虚拟环境中,我启动 python shell 并导入 django:
Python 3.9.7 (default, Sep 16 2021, 13:09:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'django'
Django 也是全局安装的,当我在全局环境中启动 python shell 时,我可以导入 django:
Python 3.9.7 (default, Sep 16 2021, 13:09:58)
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>
您似乎已经在项目目录中手动创建了一个虚拟环境,例如
python -m venv venv
。所以现在你有一个/home/tesla/Documents/projects/graphql/graphenee/venv/
.
之后你添加了一些带有诗歌的包。但是,默认情况下诗歌只会在项目目录中查找
.venv
目录(注意起始点)。由于诗歌没有找到 .venv
,它在 /home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9
中创建了一个新的虚拟环境,并在那里安装了您通过
poetry add
添加的包。
问题是您尝试使用项目目录中的“空”虚拟环境,而不是诗歌创建的虚拟环境。幸运的是,使用 poetry 运行命令非常容易,即使不激活 venv,只需在项目目录中使用
poetry run
即可。
检查 Django 安装:
poetry run python
# Executes: /home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9/bin/python
>>> import django
运行 Django 管理命令:
poetry run ./manage.py startapp users apps/users
它将在
/home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9
中使用虚拟环境。可以删除项目目录下的venv
注意:如果您想在项目目录中使用虚拟环境,请删除
/home/tesla/.cache/pypoetry/virtualenvs/graphenee-CXeG5cZ_-py3.9
,然后通过在项目目录中创建一个
python -m venv .venv`
之后安装带有诗歌的包:
poetry install
现在,当您通过
/home/tesla/Documents/projects/graphql/graphenee/.venv
运行命令时,诗歌将在 poetry run [cmd]
中使用本地虚拟环境。
当我的项目名称是 django 时,我也遇到了这个问题。 poetry 虚拟环境的名称当时也是 django,当我运行 poetry add django 时,没有任何反应。当我重命名项目时,问题就解决了。
简单的解决方案:
ln -s venv .venv
poetry install