创建新文件夹并创建虚拟环境
$ 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上的这种行为。
答案 0 :(得分:3)
wsgiref
和distribute
始终存在于virtualenv中,即使是“空”的,你还没有pip install
任何东西。有关说明,请参阅问题accepted answer的Why does pip freeze report some packages in a fresh virtualenv created with --no-site-packages?。请注意,这是在Python 3.3中修复的a bug。
itsdangerous
和MarkupSafe
是相对较新的,新的Flask
版本引入了新的依赖关系。
itsdangerous
(docs)是Flask
直接需要的。从版本0.10开始 - 请参阅添加此依赖项的github commit。
{li> MarkupSafe
Jinja2
需要Flask
Jinja2
。 Flask
在其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忽略系统的包(根本不确定那个包)。