2

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

$ 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 上注意到了这种行为。

4

3 回答 3

4

wsgiref并且distribute总是存在于 virtualenv 中,甚至是一个你还没有pip install'ed 任何东西的“空”。请参阅我的问题的已接受答案为什么 pip freeze 会报告使用 --no-site-packages 创建的新 virtualenv 中的一些包?解释一下。请注意,这是Python 3.3 中修复的错误。

itsdangerous并且MarkupSafe是较新版本引入的相对较新的新依赖项Flask

  • itsdangerous( docs ) 是Flask直接需要的。从 0.10 版开始 - 请参阅添加此依赖项的github 提交。
  • MarkupSafe( docs ) is required by Jinja2which is required by Flask. Jinja2在其 2.7 版本中添加了此依赖项 - 请参阅github 提交

你说在运行相同的命令后这些没有安装在你的 Ubuntu 机器上。但是你有什么Flask版本Jinja2?如果它们比您 Mac 上的版本旧,这可能解释了为什么它们没有引入这些新的依赖项。

于 2013-07-16T00:05:55.190 回答
1

看起来那些是Flask 依赖项,(或烧瓶依赖项的依赖项)

pip install --no-install --verbose Flask

我希望pypi 有每个项目的依赖项列表,但我没有看到它们......

于 2013-07-15T15:33:56.553 回答
1

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

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

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

于 2013-07-15T15:35:50.950 回答