【发布时间】:2012-05-07 05:00:59
【问题描述】:
开发 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 确实安装了未在需求文件中明确列出的依赖项,即使the documentation 告诉我们这些文件是平面文件。我错了我希望安装哪些依赖项。对于任何怀疑 pip 没有安装所有依赖项的人,我都会提出这个问题。
【问题讨论】:
-
那么...到底是什么问题?你知道哪些是你的“第一级”依赖吗?
-
是的,我已经在 manual-requirements.txt 中列出了它们。问题是:如果我在手动安装它们时使用需求文件,则 pip 不会安装它们的依赖项(即“二级”)
pip install django; pip install pinax; etc.。 -
只要你使用所需包的确切版本,它的依赖项应该没有变化。但是如果你不使用确切的版本,你怎么能保证你的应用仍然可以工作呢?
-
我知道,我最终会使用精确的版本进行测试和部署。我的问题涉及对我的“第一级”依赖项进行一些升级后不再需要的“第二级”依赖项。我想从头开始重建完整的部门列表,以删除不再需要的内容并避免任何冲突。
-
由于您标记为 已接受 的@mac 的答案不正确,也许是时候重新评估了?
标签: python pip requirements.txt