自动创建requirements.txt

时间:2015-07-28 18:29:03

标签: python dependencies python-import requirements

有时我从github下载python源代码,但不知道如何安装所有依赖项。如果没有requirements.txt文件,我必须手动创建它。 问题是: 鉴于python源代码目录,是否可以从导入部分自动创建requirements.txt

17 个答案:

答案 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)

简单的 Pythonic 方式

要获取标准 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中时,它会显示一条警报,并要求您安装所有必需的软件包。