ImportError: Couldn't import Django inside virtual environment with poetry?

问题描述 投票:0回答:3

我创建了一个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 django virtualenv python-poetry
3个回答
2
投票

您似乎已经在项目目录中手动创建了一个虚拟环境,例如

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]
中使用本地虚拟环境。


0
投票

当我的项目名称是 django 时,我也遇到了这个问题。 poetry 虚拟环境的名称当时也是 django,当我运行 poetry add django 时,没有任何反应。当我重命名项目时,问题就解决了。


0
投票

简单的解决方案:

ln -s venv .venv
poetry install
© www.soinside.com 2019 - 2024. All rights reserved.