我们是否应该将所有必需包及其依赖包放在requirement.txt或仅包含所需的包

时间:2018-01-30 16:37:06

标签: python python-3.x python-2.7 pip

如果我在新创建的virtualenv上安装一个包Eg:pip install bpython我执行时收到的内容

pip freeze

输出:

blessings==1.6.1
bpython==0.17
certifi==2018.1.18
chardet==3.0.4
curtsies==0.2.11
greenlet==0.4.12
idna==2.6
Pygments==2.2.0
requests==2.18.4
six==1.11.0
urllib3==1.22
wcwidth==0.1.7
  

问题: 我们是否需要将所有这些内容放在requirement.txtbpython==0.17

一旦我被要求清理requirement.txt文件,我就更新了

中的代码
pip freeze > requirement.txt

comm -12 <(pip list --format=freeze --not-required) <(pip freeze) > requirements.txt

我仍然不确定是否应该将我收到的所有包裹放在pip freeze中,或者它可以/更好地只放置那些没有依赖包裹的所需包裹。

阅读我发现最接近的Document of PIP

  

需求文件用于强制pip正确解析依赖关系。就像现在一样,pip并没有真正的依赖解析,而只是使用它为项目找到的第一个规范。

我仍然像以前一样困惑,HELP将不胜感激......

1 个答案:

答案 0 :(得分:1)

我辛苦了很多,上面@Charles Duffy所说的似乎是最合适的方法。

  

您应该有两个单独的依赖项列表:一个包含人类已决定需要的依赖项(其中不应包含传递性依赖项);一个带有冻结列表的列表,该列表反映了您测试的对象(应该包含传递性依赖项)

但是,最近发布的pipenv,我认为这是跟踪依赖项的更好方法。

这就像npm,更容易维护requirements和创建venv

  

它会为您的项目自动创建和管理virtualenv,并在您安装/卸载软件包时从Pipfile添加/删除软件包。它还会生成极其重要的Pipfile.lock,用于生成确定性的构建。