我在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
时,它显示为空/空白。我期望numpy
,os
和pandas
在这个requirements.txt
文件中。为什么它可能不工作?
1条答案
按热度按时间omqzjyyz1#
根据this Medium post by Iván Lengyel,
pipreqs
不支持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
,其中包含matplotlib
、numpy
、scipy
版本的详细信息。和seaborn
.为了全面测试它的工作,我在运行会话中打开index.ipynb
,添加一个单元格,键入import pandas as pd
,并保存笔记本.然后我关闭内核,并在终端中运行,当我重新检查requirements.txt
文件时,现在pandas
已经添加了关于版本的详细信息。更多关于
!pipreqs /app/loaded_reqs
失败原因的信息:我有一个想法,也许你需要先保存笔记本后,添加导入语句单元格?然而,没关系。这仍然不会有帮助,因为如所述here
pipreqs
,并进一步确认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
以获取完整的环境信息,但不仅仅是文件所需的信息。