安装Flask + gunicorn pip后有意想不到的依赖关系

时间:2013-07-15 15:29:01

标签: python flask pip

创建新文件夹并创建虚拟环境

$ virtualenv venv --distribute

安装两个包

$ pip install Flask gunicorn

然后将所有当前pip安装的包写入文件

$ pip freeze > requirements.txt
$ cat requirements.txt
Flask==0.10.1
Jinja2==2.7
MarkupSafe==0.18
Werkzeug==0.9.1
distribute==0.6.34
gunicorn==17.5
itsdangerous==0.22
wsgiref==0.1.2

我得到的这个包比预期的包列表要长,谁负责安装它们以及它们用于什么?有问题的包裹清单:

wsgiref==0.1.2
itsdangerous==0.22
distribute==0.6.34
MarkupSafe==0.18

我主要在我的Ubuntu盒子上使用pip,并且在相同的命令后没有安装这些软件包,我只注意到我的mac上的这种行为。

3 个答案:

答案 0 :(得分:3)

wsgirefdistribute始终存在于virtualenv中,即使是“空”的,你还没有pip install任何东西。有关说明,请参阅问题accepted answerWhy does pip freeze report some packages in a fresh virtualenv created with --no-site-packages?。请注意,这是在Python 3.3中修复的a bug

itsdangerousMarkupSafe是相对较新的,新的Flask版本引入了新的依赖关系。

    {li> itsdangerousdocs)是Flask直接需要的。从版本0.10开始 - 请参阅添加此依赖项的github commit。 {li> MarkupSafe Jinja2需要Flask Jinja2Flask在其2.7版本中添加了此依赖项 - 请参阅docs

你说在运行相同的命令后,这些没有安装在你的Ubuntu盒子上。但是你有Jinja2和{{1}}的版本?如果它们比Mac上的版本旧,那么这可以解释为什么他们没有引入这些新的依赖项。

答案 1 :(得分:1)

它们看起来像是Flask dependencies,(或者依赖于烧瓶依赖关系)

pip install --no-install --verbose Flask

我希望每个项目pypi had a list of dependencie,但我没有看到它们......

答案 2 :(得分:1)

你的virtualenv使用系统安装的软件包,所以pip会在新安装的软件包中看到它们。

在创建环境时尝试添加--no-site-packages选项。

或者,尝试显式运行环境中安装的pip实例 (path/to/your/env/bin/pip opts...),也许这会告诉pip忽略系统的包(根本不确定那个包)。