694

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

4

19 回答 19

828

您可以使用以下代码生成 requirements.txt 文件:

pip install pipreqs

pipreqs /path/to/project

更多关于 pipreqs 的信息可以在这里找到。

有时您会遇到pip freeze,但这会保存环境中的所有包,包括您当前项目中未使用的包。

于 2015-07-28T18:34:04.233 回答
767

建议使用Pipenv或其他工具来改进您的开发流程。

pip3 freeze > requirements.txt  # Python3
pip freeze > requirements.txt  # Python2

如果您不使用虚拟环境,pigar将是您的不错选择。

于 2015-11-02T00:39:32.483 回答
37

在我的情况下,我使用 Anaconda,所以从我的环境中的 conda 终端运行以下命令解决了它,并requirements.txt自动为我创建了这个文件:

conda list -e > requirements.txt

这是取自这个 Github 链接pratos/condaenv.txt

如果出现错误,并且您正在使用 anaconda,请尝试使用以下.yml选项:

conda env export > <environment-name>.yml

供其他人使用环境,或者如果您正在另一台机器上创建新环境:

conda env create -f <environment-name>.yml

.yml 选项在这里找到

于 2019-02-18T21:20:41.397 回答
33

对于 python3:(我的机器上有 python 2 和 3,其中 python2 是默认值)

# install
pip3 install pipreqs

# Run in current directory
python3 -m  pipreqs.pipreqs .

蟒蛇2:

pip install pipreqs
python -m  pipreqs.pipreqs .

要检查您的 python 版本:

python --version
于 2021-07-21T12:17:49.963 回答
21

要创建需求 Python 模块列表,请在终端中编写以下代码:

pip3 freeze > requirements.txt
于 2021-07-16T06:44:18.713 回答
16

首先,您的项目文件必须是 py 文件,即直接 python 文件。如果您的文件是 ipynb 格式,您可以使用下面的代码行将其转换为 py 类型:

jupyter nbconvert --to=python

然后,您需要从 cmd(mac 终端)安装 pipreqs 库。

pip install pipreqs

现在我们可以使用下面的代码创建 txt 文件。如果您与文件在同一路径中,则只需编写 ./ 。否则,您需要提供文件的路径。

pipreqs ./

或者

pipreqs /home/project/location

这将为您的项目创建一个 requirements.txt 文件。

于 2021-01-04T05:27:44.990 回答
14

我盲目地遵循使用 pip3 freeze > requirements.txt 的公认答案

它生成了一个巨大的文件,列出了整个解决方案的所有依赖项,这不是我想要的。

所以你需要弄清楚你想要生成什么样的 requirements.txt。

如果您需要一个包含所有依赖项的 requirements.txt 文件,请使用 pip3

pip3 freeze > requirements.txt

但是,如果你想生成一个只列出你需要的依赖项的最小 requirements.txt,那么使用 pipreqs 包。如果您在项目的每个组件级别中有大量 requirements.txt 文件,而不是解决方案级别的单个文件,则特别有用。

pip install pipreqs
pipreqs [path to folder]
e.g. pipreqs .
     pipreqs . --force --ignore=tests (Overwrites exisiting requirements.txt, ignores the tests directory)
于 2021-01-14T23:36:57.253 回答
11

确保为 python3.7 运行 pip3。

pip3 freeze >> yourfile.txt

在执行上述命令之前,请确保您已经创建了一个虚拟环境。

蟒蛇3:

pip3 install virtualenv
python3 -m venv <myenvname> 

蟒蛇2

pip install virtualenv
virtualenv <myenvname>

之后将您的源代码放入目录中。如果您现在运行 python 文件,如果您使用非本机模块,它可能不会启动。pip3 install <module>您可以通过运行或来安装这些模块pip install <module>

除了您所在的环境之外,这不会影响您的整个模块列表。

现在您可以执行顶部的命令,现在您有一个需求文件,其中仅包含您在虚拟环境中安装的模块。现在您可以运行顶部的命令。

我建议每个人都使用环境,因为这样可以让事情变得更容易。

于 2019-04-01T00:04:53.687 回答
9

有点令人兴奋,这个简单的任务在 Python 中如此复杂。这是我认为自动执行此操作的最佳方法。

你需要两个工具:

1. pipreq

pip3 install pipreqs

pipreqs 将遍历您的项目并仅安装您的项目使用的包。而不是你的python环境中的所有包pip freeze

但是这种方法有一个问题。它不安装子包。

例如,您的项目使用pandas==1.3.2. pandas本身numpy==1.21.2在其他软件包中使用。但是pipreqs本身并没有在里面写子包(即numpy)requirments.txt

这是您需要pipreqs与第二个工具结合使用的地方。

  1. 点子工具

pip3 install pip-tools

pip-tools将接收包requirements.in并生成requirements.txt包含所有子包的包。例如,如果您有 pandas==1.3.2in requirements.inpip-tools将生成

numpy==1.21.2 # via pandasrequirements.txt.

但是您需要手动将包添加到requirements.in. 这很容易出错,你可能会偶尔忘记这样做。

这是您可以使用第一个工具的地方。

但是这两个工具都写入requirements.txt. 那么如何解决呢?

使用 --savepathfor代替 defaultpipreqs写入。requirements.inrequirements.txt

在一个命令中完成;做就是了

pipreqs --savepath=requirements.in & pip-compile

你去吧。现在您无需担心手动维护包,您requirements.txt将拥有所有子包,因此您的构建是确定性的。

TL;博士

  1. pip3 install pipreqs
  2. pip3 install pip-tools

使用以下内容构建确定性requirements.txt

pipreqs --savepath=requirements.in && pip-compile

于 2021-09-07T02:36:08.067 回答
7

如果面临与我相同的问题,即不在虚拟环境中,并且需要特定项目所选文件夹(包括子文件夹)的 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))

PS:它可能有一些额外的库,因为它检查模糊逻辑。

于 2019-08-15T18:40:27.080 回答
7

Python 3 的最佳方法是:

pip3 freeze > requirements.txt

它对我有用...

于 2020-05-13T18:13:28.283 回答
7

如果您在系统中安装了许多依赖项,并且特定项目需要 requirements.txt,则可以先安装 pipreqs:

$ pip install pipreqs

并在项目文件夹下执行以下命令。

$ pipreqs

此命令将为特定项目生成 requirements.txt 文件。

于 2021-06-08T09:47:27.397 回答
6

简单的 Pythonic 方式

要获取标准文件中所有REQUIREMENTSrequirements.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
于 2021-06-27T21:28:31.257 回答
5

自动 requirements.txt 更新方法

在使用requirements.txt开发 python 应用程序时,我们有几个选择:

  1. 开发后生成 requirements.txt,当我们要部署它时。它由pip freeze > requirements.txtpipreqs为了不那么混乱的结果执行。
  2. 每次安装后手动将每个模块添加到 requirements.txt。
  3. 安装将为我们处理 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 install使用pip uninstall所需版本的包自动更新项目的 requirements.txt 文件。覆盖是安全的,因此在卸载此包后 pip 将表现正常。

您可以自定义它的工作方式。例如,全局禁用它并仅对需要的目录激活它,仅对 git 存储库激活它,或者如果它不存在则允许/禁止创建 requirements.txt 文件。

链接:

  1. 文档 - https://requirements-txt.readthedocs.io/en/latest/
  2. GitHub - https://github.com/VoIlAlex/requirements-txt
  3. PyPI - https://pypi.org/project/to-requirements.txt/
于 2021-12-22T00:16:23.497 回答
3

如果您只想列出 virtualenv 中使用的包,请使用:

pip freeze -l > requirements.txt 
于 2021-04-10T10:32:16.497 回答
3

不是一个完整的解决方案,但可能有助于在 Linux 上编译一个候选名单。

grep --include='*.py' -rhPo '^\s*(from|import)\s+\w+' . | sed -r 's/\s*(import|from)\s+//' | sort -u > requirements.txt
于 2020-12-10T10:48:50.663 回答
2

我创建了这个 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;
于 2021-01-24T03:20:01.363 回答
0

@Francis 说得对 - https://stackoverflow.com/a/65728461/1021819

但只是补充一下:

通过对 Jupyter 笔记本(即文件)的额外支持,.ipynb您现在可以使用https://pypi.org/project/pipreqsnb(与 pipreqs 的语法相同):

pip install pipreqsnb
pipreqs .

【我不是作者】

于 2021-07-27T11:43:42.873 回答
-4

如果您使用的是 PyCharm,当您打开或将项目克隆到 PyCharm 中时,它会显示一个警报并要求您安装所有必要的包。

于 2020-05-28T00:39:14.477 回答