【问题标题】:Pip freeze for only project requirements仅针对项目需求冻结点
【发布时间】:2015-11-30 03:41:32
【问题描述】:

当我运行pip freeze > requirements.txt 时,它似乎包含了所有已安装的软件包。这似乎是记录在案的行为。

然而,我做错了,因为现在在与 Django 无关的项目中包含了 Django 之类的东西。

我如何获得这个项目的需求?或者将来如何安装带有pip 的包以用于该项目。我想我错过了virtualenv 的一些内容。

【问题讨论】:

  • pip 无法理解,您的项目与 Django 无关。因此,通常您希望创建一个隔离的虚拟环境,而无需访问系统站点包并运行带有--isolated 标志的 pip 以忽略PYTHONPATH 中的内容。当然,除了项目需要之外,您不应该将软件包安装到该环境中
  • @Alik 好吧,这就是我害怕的。稍后我将研究创建虚拟环境。如果您想将此作为实际答案提交,我会接受。

标签: python pip


【解决方案1】:

pipreqs 可以为特定项目节省时间。 只是

pip install pipreqs
#then
pipreqs path/to/project

Github Page

【讨论】:

  • 我可能没有正确理解这一点,但这不会混淆 install_requires 和 require.txt 吗? requirements.txt 旨在完整和详尽,而 install_requires 旨在最小化。 packaging.python.org/discussions/…
  • @Daniel Maksimovich,我认为您的意思是暗示该命令不会像 requirements.txt 中那样输出所有 desired - pinned 包。这是真的,因为包sniffs 的要求基于位于目标目录中的文件中的导入。但不,它不会混淆两者。在任何情况下,install requires 将确保重新使用生成的 requirements.txt 将安装所有可能遗漏的需求。
  • 这产生了一个文件,其中没有 python 文件中的任何包,例如 google-cloud-storage
【解决方案2】:

我尝试了pipreqspigar,发现pigar 更好,因为它还可以生成有关使用位置的信息,它还有更多选项。

【讨论】:

  • 除此之外,pipreqs 得到 mysql-connector 和 hydra 错误。在我看来相当愚蠢的错误。
  • Pipreqs 有点老了,有一些 bug。
【解决方案3】:

我用这个命令

编辑:感谢 Addisson Klinke 的建议

pip freeze -r requirements.txt | grep -B100 "点冻结" | grep -v "pip freeze"

pip freeze -r requirements.txt | sed '/freeze/,$ d'

当我运行pip freeze -r requirements.txt 时,输出类似于

APScheduler==3.2.0
Eve==0.6.4
Eve-Elastic==0.3.8
## The following requirements were added by pip freeze:
arrow==0.8.0
Cerberus==0.9.2

我有一个这样的需求文件

APScheduler
Eve
Eve-Elastic

所以我得到这个输出和sed 来删除我不想要的依赖项。

首先将其输出到文件中

pip freeze -q -r requirements.txt | sed '/freeze/,$ d' > requirements-froze.txt 

这将只输出带有版本的库

APScheduler==3.2.0
Eve==0.6.4
Eve-Elastic==0.3.8

然后替换需求文件

mv requirements-froze.txt requirements.txt 

【讨论】:

  • 我将不得不对此进行调查,但我相信所有要求都是由pip freeze 添加的,这意味着正在搜索的行将是第一个。
  • 感谢分享pip freeze -r 选项 - 不知道!我认为grep 管道虽然有些冗长/脆弱 - 更好的方法可能是pip freeze -r requirements.txt | sed '/freeze/,$ d。这会将冻结行和所有后续行删除到列表末尾
【解决方案4】:

如果您使用的是 linux,请使用 sed

pip freeze | sed 's/==.*$/''/' > requirements.txt

【讨论】:

    【解决方案5】:

    这里是根据之前评论的简化版:https://stackoverflow.com/a/40026169/4052041

    mv requirements.txt requirements.txt.bak
    pip freeze -q -r requirements.txt.bak | awk '/.*pip freeze.*/  {exit} {print}' > requirements.txt
    

    【讨论】:

      【解决方案6】:

      pip freeze 也有同样的问题。就我而言,问题是我在没有激活我的项目虚拟环境的情况下运行了pip freeze。我激活了虚拟环境,pip freeze > requirements.txt 工作正常。

      因此,请确保通过在 Windows 上运行 <virtualenv folder name>\Scipts\activate 或在 Linux 上运行 source <virtualenv folder name>\bin\activate 来激活您的项目虚拟环境。

      如果virtualenv 具有全局访问权限,您应该使用-l--local 选项运行pip freezepip freeze -l 对应pip freeze docs

      -l, --local
      如果在具有全局访问权限的virtualenv中,不要输出全局安装的包。

      【讨论】:

        【解决方案7】:

        我刚刚遇到了同样的问题,这是我找到的解决问题的方法。

        先在你的项目目录下创建venv,然后激活。

        对于 Linux/MacOS:python3 -m venv ./venvsource myvenv/bin/activate

        对于 Windows:python3 -m venv .\venvenv\Scripts\activate.bat

        现在pip freeze > requirements.txt 应该只接受项目中使用的库。

        注意:如果您已经开始您的项目,则必须重新安装所有库才能将它们冻结在 pip 中。

        【讨论】:

          【解决方案8】:
          pip install pipreqs, 
          pipreqs>requirements.txt
          

          这很容易

          【讨论】:

            猜你喜欢
            • 2018-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-15
            • 2020-10-27
            • 1970-01-01
            • 2020-06-22
            • 1970-01-01
            相关资源
            最近更新 更多