已安装Virtualenv,但激活虚拟环境无效。

18

我从Github上克隆了我的Django项目,并使用著名的命令 source nameofenv/bin/activate 激活了虚拟环境。

但是当我运行 python manage.py runserver 时,它会报错:

ImportError: 无法导入Django。你确定它已经安装并且在PYTHONPATH环境变量中可用吗?你是否忘记激活虚拟环境?


你确定它已经安装了吗?你是怎么安装的? - Daniel Roseman
我刚刚激活了virtualenv并尝试使用python manage.py runserver命令,我认为在激活virtualenv之后不需要安装任何依赖项,是这样吗?我不太清楚! - abhi_bond
但是你仍然需要从某个地方获取Django!如果你不安装它,你怎么能期望它在你的虚拟环境中呢? - Daniel Roseman
我在想我所需的每一个依赖项都可能存在于virtualenv中。如果不是这样的话,那么我就错了!这意味着我必须安装该项目的所有相关依赖项吗? - abhi_bond
5个回答

23
我之前认为我需要的每个依赖项都可以在虚拟环境中找到,但实际上不是这样的。默认情况下,新创建的虚拟环境是空的,即没有第三方库。(可选择让虚拟环境访问全局安装的库,但那是另一回事。)创建虚拟环境后,您需要安装所需的依赖项。(虚拟环境如何知道您需要哪些依赖项呢?)操作方法是:安装虚拟环境、激活虚拟环境,然后安装项目所需的库(例如Django和其他库)。如果您的项目有 requirements.txt 文件,您可以使用以下命令安装所有需要的依赖项:
pip install -r requirements.txt

如果你的项目有一个setup.py文件,你也可以执行

pip install -e path/to/your/project/clone/.

安装此项目需在虚拟环境中进行。这将会安装依赖。

当然,如果唯一的依赖是Django,您可以直接输入以下命令:

pip install django

你的意思是将Django安装到venv文件夹中,该文件夹位于“C:\ Users \ John Uzoma \ AppData \ Local \ Programs \ Python \ Python35 \ Lib \ venv”吗? - JohnnyDevv
好的,激活新创建的虚拟环境,然后执行 pip install django。不要手动复制文件夹。 - Jérôme

14

在 Ubuntu 版本上

#install python pip 
sudo apt-get install python-pip
#install python virtualenv
sudo apt-get install python-virtualenv
# create virtual env 
virtualenv  myenv
#activate the virtualenv
. myenv/bin/activate
#install django inside virtualenv
pip install django
#create a new django project
django-admin.py startproject mysite
#enter to the folder of the new django project
cd mysite
#run the django project
python manage.py runserver 

1
兄弟,抱歉啊,我忘了说一下,我是在MacOS上开发的。谢谢你的回答 :) - abhi_bond
当您激活虚拟环境时,如果运行pip freeze命令,则必须返回类似django==您的Django版本的内容。请尝试通过命令pip install django在您的虚拟环境中安装Django。 - Dimitris Kougioumtzis
@abhi_bond 你的项目顶层目录中是否有名为 requirements.txt 的文件? - Alain
@ Dimitris,当我使用pip freeze命令时,发现我没有安装Django。看来我需要安装Django了。谢谢啊,伙计 :) - abhi_bond
“--no-site-packages” 是 virtualenv 的一个已弃用选项。此外,我认为他没有处理在他们的 MacOS 上安装 pip 的问题。 - slackmart
显示剩余2条评论

5
如果你的电脑上安装了多个Python版本,例如python2.7python3.4python3.6,那么很重要的一点就是要确定python引用的是哪个版本,更重要的是要确定pip引用的是哪个版本。
在我安装了Let's Encrypt之后,我遇到了同样的问题,当我运行以下命令时。
(python3 manage.py runserver 0:8000 &)

我检查了 python 的版本,并发现可用的版本有 python3python3.4python3.6python3.4m

我只是将 python3 更改为 python3.6,并解决了问题。

(python3.6 manage.py runserver 0:8000 &)

如果长时间正常运行然后突然崩溃,那么很可能是版本不匹配的问题。


4
我猜你想从其他电脑上传虚拟环境,并希望仅激活此环境即可工作,但实际上这并不推荐。正如@Alain所说,最好使用包含项目依赖项的 requirements.txt 文件而不是将virtualenv文件上传到git存储库中。您可以在激活环境后使用 pip freeze>requirements.txt 命令生成项目要求文件。
这样做的话,当您从另一台计算机克隆存储库时,需要通过以下命令创建新的虚拟环境:
virtualenv nameofenv

然后激活它:

source nameofenv/bin/activate

最后,使用要求文件通过以下方式安装项目所需的要求:
pip install -r requirements.txt

1

我之前通过 pip3 install Django 安装了 Django 2,但我运行的是 python manage.py runserver 而不是 python3 manage.py runserver。Django 2 只能与 Python 3+ 兼容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接