我对virtualenv
感到困惑。我一直在阅读文档和尝试示例,但它并没有变得更好。
我通过以下方式创建了virtualenv
:
$ virtualenv myapp_venv --no-site-package
我使用--no-site-packages
因为我想知道我的requirements.txt
足以构建和运行我的代码。我不想依赖我的开发机器上可能安装的任何内容。
然后我尝试将依赖项安装到我的virtualenv
:
$ source myapp_venv/bin/activate
(myapp_venv) $ sudo pip install -r requirements.txt
此时我收到了许多这样的消息:
Requirement already satisfied (use --upgrade to upgrade): Flask==0.10.1 in /usr/local/lib/python2.7/dist-packages (from -r requirements.txt (line 1))
这让我感到惊讶,因为我认为virtualenv
不会关注全球可用的包,而是关注这个项目的环境。
当我继续尝试运行该应用程序时:
(myapp_venv) $ python run.py
Traceback (most recent call last):
File "run.py", line 1, in <module>
from app import app
File "/home/eric/code/python/tournament/app/__init__.py", line 1, in <module>
from flask import Flask
ImportError: No module named flask
但如果我停用virtualenv
,该应用就可以运行了。
如何git pip
将软件包安装到virtualenv
?
对于上下文,我对Java / Maven有着专业的经验。我有一些Python语言经验,但Python生态系统对我来说仍然是新的。
答案 0 :(得分:2)
跳过sudo,你会没事的。 Sudo告诉全球安装。
答案 1 :(得分:0)
检查no-global-site-packages.txt
中的lib
。
如果no-global-site-packages.txt
文件位于lib
文件夹中,那么它将从您的virtualenv
其他所有包中获取全局。
另外,正如wissam所说,不要使用sudo
。它是正确的。因为使用sudo
,它将全局安装。