PyCharm 没有导出正确的 requirements.txt

Posted

技术标签:

【中文标题】PyCharm 没有导出正确的 requirements.txt【英文标题】:PyCharm not exporting the correct requirements.txt 【发布时间】:2018-01-10 13:07:11 【问题描述】:

我在 PyCharm 中创建了一个项目,该项目使用安装在 PyCharm 创建的 Python 3.6.1 虚拟环境中的烧瓶(以及其他几个模块),并且该应用程序本身在 PyCharm 中运行良好。但是,当我为其他虚拟需求设置 requirements.txt 文件时,我注意到输出文件中只列出了 virtualenv。 (为了创建文件,我去了“控制台”并做了“pip freeze > requirements.txt”。)

在测试了一些东西后,我注意到pip list 一开始只给了我三个安装的模块。我知道这不是真的,因为当我进入解释器的设置时,PyCharm 说安装了很多其他模块,但它们似乎并没有实际上安装。 p>

如何有效地在 PyCharm 中创建需求文件?我是否只需要在自述文件中列出我安装的所有模块并让我的用户自己弄清楚如何安装它们?

以下截图:

项目设置对话框:

点子列表输出:

【问题讨论】:

【参考方案1】:

使用 pipreqs

$ pip install pipreqs
$ pipreqs /home/project/location
Successfully saved requirements file in /home/project/location/requirements.txt

这会将您当前项目目录中使用的包导出到 requirements.txt

见pipreqs

为什么不冻结点子?

pip freeze 只保存用 pip 安装的包 安装在您的环境中。 pip freeze 将所有包保存在 环境,包括您当前不使用的环境 项目。 (如果你没有 virtualenv) 有时您只需要 在不安装的情况下为新项目创建 requirements.txt 模块。

【讨论】:

pipreqs 似乎不起作用。它只是抛出一个关于无法解码字符的错误。 @BenSchwabe 你可以试试--encoding=utf-8 选项,看看错误是否仍然存在【参考方案2】:

这当然很奇怪,我唯一能想到的就是Windows上virtualenv的问题。

无论如何,从pip freeze 创建您的requirements.txt 并不是最佳实践,因为您安装的软件包比项目需要的软件包多

例如假设您的项目只需要 Flask:

$ pip install Flask
$ pip freeze
click==6.7
Flask==0.12.2
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
Werkzeug==0.12.2

正如您通过安装 Flask 所看到的,安装了更多软件包,但您不必在 requirements.txt 中列出这些软件包,因为它们不是您的项目要求,而是 Flask 的要求。

因此,您应该手动构建您的requirements.txt。我通常做的是pip install Flask; pip freeze |grep Flask 并将Flask==0.12.2 行复制到我的requirements.txt,每次我用pip 安装东西时都会这样做。

【讨论】:

但是如果 Flask 本身需要使用这些模块呢?例如,在我的代码中,我从未明确导入 Jinja2,但我知道我正在使用它。我觉得仅仅因为我没有使用它们而手动排除文件是一个冒险的决定。 当您执行pip install -r requirements.txt 时,它将看到 Flask 并开始安装 Flask,在此过程中 Flask 将列出自己的要求,因此也会安装这些要求。 IE。你需要 Flask,Flask 需要 Jinja2。

以上是关于PyCharm 没有导出正确的 requirements.txt的主要内容,如果未能解决你的问题,请参考以下文章

pycharm 运行没有错误,可是却不运行处结果,是啥问题?

使用 pipreqs 和 freeze 创建 requirements.txt

pycharm显示配置不正确怎么回事

Pycharm中包的导出和导入,以及超时解决

pycharm怎么保存为py文件到桌面?

pycharm导出自动化测试报告