有时我从github下载python源代码,不知道如何安装所有的依赖项。如果没有requirements.txt文件,我必须手工创建它。 问题是: 给定python源代码目录,是否有可能从导入部分自动创建requirements.txt ?
当前回答
如果遇到和我一样的问题,即不在虚拟环境中,并且想要特定项目的requirements.txt或从选定的文件夹(包括子)和pipreqs是不支持的。
你可以使用:
import os
import sys
from fuzzywuzzy import fuzz
import subprocess
path = "C:/Users/Username/Desktop/DjangoProjects/restAPItest"
files = os.listdir(path)
pyfiles = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith('.py'):
pyfiles.append(os.path.join(root, file))
stopWords = ['from', 'import',',','.']
importables = []
for file in pyfiles:
with open(file) as f:
content = f.readlines()
for line in content:
if "import" in line:
for sw in stopWords:
line = ' '.join(line.split(sw))
importables.append(line.strip().split(' ')[0])
importables = set(importables)
subprocess.call(f"pip freeze > {path}/requirements.txt", shell=True)
with open(path+'/requirements.txt') as req:
modules = req.readlines()
modules = {m.split('=')[0].lower() : m for m in modules}
notList = [''.join(i.split('_')) for i in sys.builtin_module_names]+['os']
new_requirements = []
for req_module in importables:
try :
new_requirements.append(modules[req_module])
except KeyError:
for k,v in modules.items():
if len(req_module)>1 and req_module not in notList:
if fuzz.partial_ratio(req_module,k) > 90:
new_requirements.append(modules[k])
new_requirements = [i for i in set(new_requirements)]
new_requirements
with open(path+'/requirements.txt','w') as req:
req.write(''.join(new_requirements))
附注:它可能有一些额外的库,因为它检查模糊逻辑。
其他回答
这不是一个完整的解决方案,但可能有助于在Linux上编译一个候选列表。
grep --include='*.py' -rhPo '^\s*(from|import)\s+\w+' . | sed -r 's/\s*(import|from)\s+//' | sort -u > requirements.txt
你可以用命令来做。它将创建requirements .txt并自动添加相关模块。
For Unix : pip3 freeze > requirements.txt
For Windos: pip freeze > requirements.txt
Python 3的最佳方式是:
pip3 freeze > requirements.txt
这对我很管用……
创建requirement.txt:
对于Python 3版本命令为:
pip3 freeze > requirements.txt
对于Python 2版本命令为:
pip freeze > requirements.txt
让安装:
对于Python 3版本命令为:
pip3 install -r requirements.txt
对于Python 2版本命令为:
pip install -r requirements.txt
自动更新requirements.txt的方法
在使用requirements.txt开发python应用程序时,我们有几个选择:
在开发完成后,当我们想要部署它时,生成requirements.txt。它由pip freeze > requirements.txt或pipreqs执行,以减少混乱的结果。 在每次安装后手动将每个模块添加到requirements.txt中。 安装管理器,它将为我们处理requirements.txt更新。
1-st选项有很多答案,2-d选项不言自明,所以我想描述3-d方法。有一个叫做to-requirements.txt的库。要安装它,输入以下命令:
pip install to-requirements.txt # Pip install to requirements.txt
如果你一次阅读整个命令,你就会明白它是做什么的。安装后,您应该安装它。运行:
requirements-txt setup
它覆盖pip脚本,以便每个pip安装或pip卸载都自动使用所需版本的包更新项目的requirements.txt文件。重写是安全的,因此卸载此包后pip将正常运行。
你可以自定义它的工作方式。例如,全局禁用它,只在需要的目录中激活它,只在git存储库中激活它,或者允许/不允许创建requirements.txt文件(如果它不存在)。
链接:
文档- https://requirements-txt.readthedocs.io/en/latest/ GitHub - https://github.com/VoIlAlex/requirements-txt PyPI - https://pypi.org/project/to-requirements.txt/
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 使用try和。Python中的if
- 如何在Python中获得所有直接子目录