开发 Django Web 应用程序时,我有一个需要安装在 virtualenv 中的软件包列表。说:
Django==1.3.1
--extra-index-url=http://dist.pinaxproject.com/dev/
Pinax==0.9b1.dev10
git+git://github.com/pinax/pinax-theme-bootstrap.git@cff4f5bbe9f87f0c67ee9ada9aa8ae82978f9890
# and other packages
最初,我在开发过程中一个一个地手动安装它们。这安装了所需的依赖项,我最终pip freeze
在部署应用程序之前使用了它。
问题是,当我升级了一些包时,一些依赖项不再使用也不需要,但它们一直被pip freeze
.
现在,我想以这种方式设置一个新的 virtualenv:
- 将所需的包(没有它们的依赖项)放在一个需求文件中,
比如manual-requirements.txt
- 安装它们及其依赖项
pip install -r manual-requirement.txt
(←问题,这不会安装依赖项) - 冻结完整的 virtualenv
pip freeze -r manual-requirements.txt > full-requirements.txt
并部署。
有什么方法可以做到这一点,而无需在新的 virtualenv 中手动重新安装软件包以获取它们的依赖项?这很容易出错,我想自动化从不再需要的旧依赖项中清除 virtualenv 的过程。
编辑:实际上,pip确实安装了未在需求文件中明确列出的依赖项,即使文档告诉我们这些文件是平面的。我错了我希望安装哪些依赖项。对于任何怀疑 pip 没有安装所有依赖项的人,我都会提出这个问题。