Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何自动pip安装所有未找到的模块?_Python_Pip - Fatal编程技术网

Python 如何自动pip安装所有未找到的模块?

Python 如何自动pip安装所有未找到的模块?,python,pip,Python,Pip,如果您的python项目没有requirements.txt-您可能需要运行该项目,请检查ModuleNotFoundError,安装模块,然后重复 如何一次安装所有缺失的模块 这主要是管理项目需求的人的问题。据我所知,不存在简单的解决办法。解决方法是使用grep手动查找和检查导入。这很恶心,但很管用 grep -r --include=\*.py 'import' YOUR_DIR 好了,现在我正无耻地在@implezabot的答案上构建,它将忽略本地模块级导入,并过滤掉非顶级第三方导入:

如果您的python项目没有requirements.txt-您可能需要运行该项目,请检查ModuleNotFoundError,安装模块,然后重复


如何一次安装所有缺失的模块

这主要是管理项目需求的人的问题。据我所知,不存在简单的解决办法。解决方法是使用grep手动查找和检查导入。这很恶心,但很管用

grep -r --include=\*.py 'import' YOUR_DIR
好了,现在我正无耻地在@implezabot的答案上构建,它将忽略本地模块级导入,并过滤掉非顶级第三方导入:

grep -hEr --include=\*.py '^import|^from' <path/to/dir> | cut -d' ' -f2 | awk -F'.' '{print $1}' | sort -u -t' ' | grep -v <path/to/dir> > requirements.txt
grep-hEr--include=\*.py'^import'^from'|cut-d'-f2 | awk-F'.'{print$1}'.\124; sort-u-t'.\124; grep-v>requirements.txt

无耻地在@NateDellinger的答案之上构建。使用此选项创建requirements.txt文件:

grep -hEr --include=\*.py '^import|^from' <path/to/dir> | cut -d' ' -f2 | sort -u > requirements.txt
grep-hEr--include=\*.py'^import'^from'| cut-d'-f2 | sort-u>requirements.txt

然后执行
pip安装-r requirements.txt

使用
grep
的另一种解决方案是使用名为
findimports
的python包,它将打印出所有依赖项

findimports -n <PATH_TO_DIR>
findimports-n

一个黑客python解决方案:D

import re
import pip

pkgs = [] 
with open('file_you_want_to_run.py') as f:
    for lines in f:
        pkgs.append(re.sub('import\s|from\s|[*]|\s','',lines)) #strips the package names, deletes import, from and any * entries


pip.main(['install'] + pkgs) #might be slightly different for your version of pip..i.e. pip._internal.main or something similar

我认为这是不可能的,因为Python不能引发所有异常ModuleNotFoundError。它从第一点开始,开始导入模块-如果它不存在,将引发异常,您的脚本将丢失,这非常好。尽管如此,仍然需要一些手动管理,因为它将包括内部包导入和非顶级第三方导入。为了好玩,我在我的一个项目上运行了它,得到了类似于
werkzeug.exceptions
的东西。我想,只要做一点额外的工作,您就可以删除非顶级导入,并在
下排除导入:)是的,您是对的。我只是假设pip会忽略这些条目(您提到的内部包)。我没有测试tho。它是为了去除本地导入,
-v
指示grep打印所有不包含图案的行。我了解
grep-v
的功能,但我不了解它在这种情况下的功能。我没有看到它的模式arg。逐字运行该命令会导致空输出(在将
您的_DIR
替换为相同的DIR之后)。也许我遗漏了什么。
您的_DIR
在第二个命令中不存在,因为我是根据您的回复构建的。如果在第二个命令中有一个替换了的两个实例,grep-v将执行过滤本地包本身的最后一步。如果您的本地包是my_包,那么最终输出将是
argparse
my_包
请求
,而不使用最终的grep-v,因为my_包中有任何本地导入。我喜欢您的解决方案,但我认为最后的
grep
不应该在那里。在填充的目录上测试该命令将导致空输出。删除最后一个
grep
对我很有用。也许是操作系统/机器的不同,不管怎样,谢谢你的解释。