有时我从github
下载python源代码,但不知道如何安装所有依赖项。如果没有requirements.txt
文件,我必须手动创建它。
问题是:
鉴于python源代码目录,是否可以从导入部分自动创建requirements.txt
?
答案 0 :(得分:239)
您可以使用以下代码生成requirements.txt文件:
pip install pipreqs
pipreqs /path/to/project
有关pipreqs的更多信息,请访问here。
有时您会遇到pip freeze
,但这会保存环境中的所有包,包括您当前项目中未使用的包。
答案 1 :(得分:161)
如果您使用虚拟环境,pip freeze > requirements.txt
就好了。如果没有,pigar将是一个不错的选择。
顺便说一句,我不确定它是否适用于2.6。
<强>更新强>:
建议使用Pipenv或其他工具来改善您的开发流程。
答案 2 :(得分:12)
首先,你的项目文件必须是py文件,也就是直接python文件。如果您的文件是 ipynb 格式,您可以使用以下代码行将其转换为 py 类型:
jupyter nbconvert --to=python
然后,您需要从 cmd(mac 终端)安装 pipreqs 库。
pip install pipreqs
现在我们可以使用下面的代码创建txt文件。如果您与文件位于同一路径,则只需编写 ./ 。否则,您需要提供文件的路径。
pipreqs ./
或
pipreqs /home/project/location
这将为您的项目创建一个 requirements.txt 文件。
答案 3 :(得分:6)
Python 3的最佳方法是:
pip3 freeze > requirements.txt
对我有用...
答案 4 :(得分:4)
对于python3:(我的机器上有python 2和3,其中python2是默认值)
# install
pip3 install pipreqs
# Run in current directory
python3 -m pipreqs.pipreqs .
答案 5 :(得分:3)
在我的情况下,我使用Anaconda,因此从我的环境中的conda终端运行以下命令即可解决该问题,并自动为我创建了此要求txt文件:
conda list -e > requirements.txt
此内容取自该Github链接pratos/condaenv.txt
答案 6 :(得分:3)
WHERE
注意:使用点冻结,将所有软件包保存在环境中,包括您当前项目中不使用的软件包。
答案 7 :(得分:2)
如果你的系统中已经安装了很多依赖,并且你需要一个特定项目的requirements.txt,你可以先安装pipreqs:
$ pip install pipreqs
并在项目文件夹下执行以下命令。
$ pipreqs
此命令将为特定项目生成 requirements.txt 文件。
答案 8 :(得分:1)
要创建需求 Python 模块列表,请在终端中编写以下代码:
pip3 freeze > requirements.txt
答案 9 :(得分:1)
我创建了这个 bash 命令。
for l in $(pip freeze); do p=$(echo "$l" | cut -d'=' -f1); f=$(find . -type f -exec grep "$p" {} \; | grep 'import'); [[ ! -z "$f" ]] && echo "$l" ; done;
答案 10 :(得分:1)
如果您只想列出 virtualenv 中使用的包,请使用:
pip freeze -l > requirements.txt
答案 11 :(得分:0)
@Francis 说得对 - https://stackoverflow.com/a/65728461/1021819
但只是补充:
有了对 Jupyter 笔记本的额外支持 - 即 .ipynb
文件 - 您现在可以使用 https://pypi.org/project/pipreqsnb(与 pipreqs 相同的语法):
pip install pipreqsnb
pipreqs .
[我不是作者]
答案 12 :(得分:0)
要获取标准 requirements.txt
文件中所有要求的列表,您可以使用以下命令。
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
答案 13 :(得分:0)
这不是一个完整的解决方案,但可能有助于在Linux上编制候选清单。
grep --include='*.py' -rhPo '^\s*(from|import)\s+\w+' . | sed -r 's/\s*(import|from)\s+//' | sort -u > requirements.txt
答案 14 :(得分:0)
如果遇到与我相同的问题,即不在虚拟环境上,并且想要对特定项目 或从选择的文件夹(包括子文件夹)中的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))
P.S:在检查Fuzzylogic时可能还会有一些其他库。
答案 15 :(得分:0)
确保为python3.7运行pip3。
pip3 freeze >> yourfile.txt
它应该是兼容性问题,或是只是“ pip”不起作用的错误。 确保转到“冻结”文件并删除不需要的任何模块。 这就是我的解决方法。 :)
答案 16 :(得分:-3)
如果您使用的是PyCharm,则在将项目打开或克隆到PyCharm中时,它会显示一条警报,并要求您安装所有必需的软件包。