“pipreqs”正在Docker容器中生成空白要求. txt

e0bqpujr  于 2023-02-07  发布在  Docker
关注(0)|答案(1)|浏览(145)

我在Docker容器中的Jupyter实验室笔记本中使用Python,在一个单元格中有以下代码:

import numpy as np
import os
import pandas as pd

然后运行以下单元格:

!pipreqs /app/loaded_reqs

并得到:

INFO: Successfully saved requirements file in /app/loaded_reqs/requirements.txt

但是当我打开requirements.txt时,它显示为空/空白。我期望numpyospandas在这个requirements.txt文件中。为什么它可能不工作?

omqzjyyz

omqzjyyz1#

根据this Medium post by Iván Lengyelpipreqs不支持Jupyter笔记本电脑。(This issue in in the pipreqs repo, open since 2016让我相信了这个说法的真实性。很好,这个问题帖子还提出了我在谷歌搜索“pipreqs jupyter”时已经找到的解决方案。)**另外,重要的是,**您通常不使用对您尝试使用的笔记本中的笔记本文件起作用的工具。(或者至少它是需要时刻注意的东西,[或者如果可能的话进行测试],类似于避免在循环中对正在修改的列表进行迭代。)

解决方案--请改用pipreqsnb

that Medium post中,Iván Lengyel说它不适用于笔记本电脑,但他提供了一个适用于笔记本电脑的 Package 器。因此,在笔记本电脑之外的终端中,但在相同的环境中(在您的情况下,在docker容器中),通过pip install pipreqsnb安装pipreqsnb。然后运行它,指向您的特定笔记本文件。我将在下一段中给予一个示例。
我刚刚试过,它在here上按下launch binder徽章启动的临时会话中工作。当会话出现时,我打开一个终端,运行pip install pipreqsnb,然后运行pipreqsnb index.ipynb。那是我第一次看到requirements.txt,其中包含matplotlibnumpyscipy版本的详细信息。和seaborn.为了全面测试它的工作,我在运行会话中打开index.ipynb,添加一个单元格,键入import pandas as pd,并保存笔记本.然后我关闭内核,并在终端中运行,当我重新检查requirements.txt文件时,现在pandas已经添加了关于版本的详细信息。
更多关于!pipreqs /app/loaded_reqs失败原因的信息:
我有一个想法,也许你需要先保存笔记本后,添加导入语句单元格?然而,没关系。这仍然不会有帮助,因为如所述herepipreqs,并进一步确认at the pipreqs issues list不支持Jupyter笔记本。
另外,请记住,在笔记本电脑中使用感叹号来运行shell中的命令并不意味着shell将与笔记本电脑的内核处于相同的环境中,请参阅第二段here以了解更多信息。(这对于理解未来的事情可能是有用的,比如为什么在从笔记本电脑内部安装时要使用%pip%conda magic命令,请参见here,并且不要在现代Jupyter中的该命令前面加上感叹号。)
或者在最后的笔记本里,我建议尝试%watermark --iversions,参见watermark。然后编写一些代码来生成requirements.txt。(另外,我还看到一些与from X import Y一起导入的包相关的bug,参见here。)
或者我建议在笔记本电脑中尝试%pip freeze以获取完整的环境信息,但不仅仅是文件所需的信息。

相关问题