2013-07-15 33 views
2

创建一个新的文件夹,并创建一个虚拟环境安装瓶+ gunicorn PIP后有意外的依赖

$ virtualenv venv --distribute 

和安装两个包

$ pip install Flask gunicorn 

然后编写所有的当前画中画的安装包后一个文件

$ 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 

我得到这个长于预期的pac列表kages负责他们的安装,他们用于什么?有问题的包装清单:

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

我大部分使用PIP在我的Ubuntu框,没有这些包相同的命令后安装的,我发现只有在我的Mac此行为。

回答

3

wsgirefdistribute总是出现在virtualenv中,即使是一个“空”的,你还没有编辑任何东西。对于我的问题Why does pip freeze report some packages in a fresh virtualenv created with --no-site-packages?,请参阅accepted answer以获得解释。请注意,这是在Python 3.3中修复的a bug

itsdangerousMarkupSafe是比较新的,新的依赖关系由新的Flask版本引入。

  • itsdangerousdocs)由Flask直接需要。从版本0.10开始 - 请参阅github commit其中添加了此依赖关系。
  • MarkupSafedocs)需要Jinja2这是Flask所要求的。 Jinja2在2.7版中增加了这种依赖关系 - 请参阅github commit

你说在运行完全相同的命令后,这些文件并没有安装在你的Ubuntu机器上。但是你有什么版本的FlaskJinja2?如果它们比Mac上的版本旧,这可能可以解释为什么它们没有引入这些新的依赖关系。

+0

你说得没错,我在Ubuntu Flask上的经验并不是最新的,所以这两个依赖似乎都是在这之后加入的。辉煌的答案! –

1

它看起来像那些Flaskdependencies(或烧瓶依赖的依赖)

pip install --no-install --verbose Flask

我希望pypi had a list of dependencie S代表每一个项目,但我没有看到他们...

+0

的确,谢谢!虽然有两个依赖仍然留下无法解释的'wsgiref'和'distribute' –

+1

@MorganWilde确实。这是一个错误。请参阅[我的答案](http://stackoverflow.com/a/17665936/445073) – Day

1

您的virtualenv使用系统安装的软件包,因此pip会在新安装的软件包中看到它们。

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

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

+0

您能详细阐述一下您的观点:“venv使用系统安装的软件包”吗?我个人不记得在系统范围内安装任何软件包,除非意外......有没有办法检查安装了系统的@astrognocci? –

+1

@Morgan Wilde:检查系统是否安装了什么,只是在不使用virtualenv的情况下进行pip冻结(pip也需要安装在系统上)apt-get在像Debian这样的Debian上安装python-pip。我前一阵子遇到了一些问题,我试图在venv和pip中安装nosetests,检测系统的一个,只是中止,而不是获得新的实例。我认为dm03514得到了正确的答案,tho。 – astrognocci

+0

感谢您放纵我,再一次观察 - 在检查了我的系统广泛点后,我确实看到了比我的问题更多的列表。你如何解释,如果你的原始前提是 - pip可以看到所有新安装的产品? @astrognocci –

相关问题