有时我从github下载python源代码,不知道如何安装所有的依赖项。如果没有requirements.txt文件,我必须手工创建它。 问题是: 给定python源代码目录,是否有可能从导入部分自动创建requirements.txt ?
当前回答
你可以用命令来做。它将创建requirements .txt并自动添加相关模块。
For Unix : pip3 freeze > requirements.txt
For Windos: pip freeze > requirements.txt
其他回答
简单的python方式
要获得标准REQUIREMENTS .txt文件中所有REQUIREMENTS的列表,您可以使用以下命令。
pip freeze > requirements.txt
现在,这将自动创建一个标准需求文件,其中包含安装在相应版本旁边的所有包。
终端打印精美
如果你只是想在终端上得到一个漂亮的打印,你可以使用下面的方法。
pip list
它以漂亮的打印格式列出了所有已安装的包。
自定义的依赖
如果你有一个项目文件夹,比如Github Repo,你想为项目获得一个自定义的requirements.txt,你可以使用下面的包。 https://pypi.org/project/pipreqs/ pipreqs
使用
$ pipreqs /home/project/location
Successfully saved requirements file in /home/project/location/requirements.txt
requirements.txt的内容
wheel==0.23.0
Yarg==0.1.9
docopt==0.6.2
确保为python3.7运行pip3。
pip3 freeze >> yourfile.txt
在执行上述命令之前,请确保您已经创建了一个虚拟环境。
python3:
pip3 install virtualenv
python3 -m venv <myenvname>
python2:
pip install virtualenv
virtualenv <myenvname>
然后将源代码放入该目录。如果你现在运行python文件,如果你使用的是非本地模块,它可能不会启动。您可以通过运行pip3 install <module>或pip install <module>来安装这些模块。
除了您所处的环境外,这不会影响整个模块列表。
现在您可以执行顶部的命令,现在您就有了一个需求文件,其中只包含您在虚拟环境中安装的模块。现在可以在顶部运行命令。
我建议每个人都使用环境,因为当涉及到这样的事情时,它会让事情变得更容易。
建议使用Pipenv或其他工具来改进开发流程。
pip3 freeze > requirements.txt # Python3
pip freeze > requirements.txt # Python2
如果您不使用虚拟环境,pigar将是一个很好的选择。
因为大多数使用pipreqs的答案对我来说都不管用。以下是我的答案。
生成requirements.txt文件:
pip install pipreqs
python -m pipreqs.pipreqs --encoding utf-8 /path/to/project
我更喜欢使用pipreqs而不是pip freeze,因为pip freeze保存了环境中的所有包,包括那些在当前项目中不使用的包。但是,pipreqs只保存您在项目中使用的那些。
安装需求使用:
pip3 install -r 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))
附注:它可能有一些额外的库,因为它检查模糊逻辑。
推荐文章
- 使用Pandas将列转换为行
- 从matplotlib中的颜色映射中获取单个颜色
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列