在 GitLab 中创建 requirements.txt

Posted

技术标签:

【中文标题】在 GitLab 中创建 requirements.txt【英文标题】:Creating requirements.txt in GitLab 【发布时间】:2022-01-16 22:00:09 【问题描述】:

可能是一个愚蠢的问题,但我正在尝试在 GitLab 中建立一个项目,该项目将用于部署 ML 模型,为此我将使用 FastAPI。我对此很陌生,会尽量提供尽可能多的信息。

我在 GitLab 中创建了该项目,该项目现在只包含一个 README.md 文件。实际的 Python 代码存储在我计算机上的一个文件夹(“MyProject”)中,其中包含两个文件夹,每个文件夹都包含一些数据、.py 脚本和一个笔记本。

为了设置requirements.txt,我尝试在Windows 中创建一个虚拟环境。现在,当我打开“MyProject”文件夹时,它包含这两个带有代码的文件夹和虚拟环境,其中还包含Lib, Scripts, pyvenv.cfg。后者包含:

home = c:\users\me\anaconda3
implementation = CPython
version_info = 3.8.5.final.0
virtualenv = 20.10.0
include-system-site-packages = false
base-prefix = c:\users\me\anaconda3
base-exec-prefix = c:\users\me\anaconda3
base-executable = c:\users\me\anaconda3\python.exe

我还克隆了 GitLab 存储库,但在我的计算机上它保存在其他地方(c:\users\me)。我知道我需要这样做:

pip install -r
requirements.txt

但我不明白如何实际添加此需求文件。在我创建这个虚拟环境之前,我的 ML 模型所需的所有包和库都是很久以前用 anaconda 安装的。我做错了什么吗?

【问题讨论】:

为什么不简单地pip freeze > requirements.txt 你使用什么库? @NilsWerner 我在环境中执行此操作,在 anaconda 提示符下,创建的文件为空。 以下答案缺少什么:您必须 deactivate 虚拟环境并使用您的 anaconda 设置以使 pip freeze 工作。之后查看创建的文件并删除环境中不需要的任何包。然后再次激活 venv 并运行pip install -r requirements.txt pandas to nltk and spacy 使用您的编辑器创建一个空文件requirements.txt 并每行添加一个库。 pandas 在第一行,mtk 在另一行,spacy 在第三行。对您使用的每个库重复此操作。 【参考方案1】:

我认为你把一些事情搞混了。 GitLab 使用 Git 对您的文件(您的代码)进行版本控制。因此,您的存储库应包含带有您的代码的文件。您可以将文件夹“MyProject”的文件放入您将存储库克隆到的文件夹中。还要添加 requirements.txt 和 readme-file 等等。

虚拟环境用于保持 Python 的系统安装干净,并且只为每个项目安装必要的包。除其他外,避免包要求冲突。 requirements.txt 文件的使用与虚拟环境无关,即使它是一个合理的组合。

通常这意味着,您的 requirements.txt 始终与您的代码共享,因为它位于同一个存储库中。当有人克隆存储库时,他可以使用 requirements.txt 将所有依赖项安装到他的 venv(或其他地方),然后在没有 nedd 的情况下运行您的代码以安装更多的 python 包。

您的 requirements.txt 文件必须包含如下所示的列:numpy==1.21.4。然后您必须使用<your path to the venv folder>\venv\Scripts\activate 激活环境并使用python -m pip install -r requirements.txt 安装您的requirements.txt 中列出的包。

【讨论】:

【参考方案2】:

如何实际添加此需求文件

您自己创建文件。对于您使用的每个库,在 requirements.txt 中添加一行,并带有库的名称。另见文档https://pip.pypa.io/en/stable/reference/requirements-file-format/

创建文件后,commitpush 将其保存到 git 存储库中。

我的机器学习模型所需的所有包和库都是很久以前用 anaconda 安装的

带有 docker executor 的 Gitlab-CI 从一个全新的环境开始。您必须重复 所有 在 docker 环境中的工作站内部 上执行的安装步骤。您可以在本地运行容器的 docker 实例进行测试。查阅 gitalb-​​ci 和 docker 文档。

【讨论】:

【参考方案3】:

简单的解决方案是pip freeze > requirements.txt,但此命令将添加您的环境中存在的所有包,这些包可能不会在您的项目中使用。在我的日常工作中,我使用这个https://pypi.org/project/pipreqs/。你可以安装它并在你的项目文件夹中运行pipreqs --force。这会将包添加到您的项目中使用的 requirements.txt。

【讨论】:

是的,使用 pip freeze 只会创建一个空文件夹。所以这意味着我保留这个空文件,但我在环境中安装pipreqs,并在“MyProject”中运行pipreqs --force 请试一试 我收到UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 454: character maps to <undefined>【参考方案4】:

您可以使用pip freeze > requirements.txt 创建requirements.txt 并将其添加到您的存储库中。这将生成您已安装的软件包和您拥有的确切版本的列表。

https://pip.pypa.io/en/stable/cli/pip_freeze/

【讨论】:

我按照其他评论者的建议这样做了,但是创建的文件是空的。 如果你 pip freeze 是空的,这意味着你还没有安装任何包(在这个环境中)。确保您使用的是正确的 virtualenv。 如果我现在手动安装它们会有帮助,还是需要重新开始?我应该先创建环境... 如果您知道自己需要什么,您可以创建一个新环境并安装所需的软件包。您正在使用 conda,也许您会使用 conda env list 然后 conda activate <envname> 找到您的初始环境?

以上是关于在 GitLab 中创建 requirements.txt的主要内容,如果未能解决你的问题,请参考以下文章

在 GitLab 中创建 pyqt 构建

在 GitLab 中创建合并请求失败

在 GitLab 中创建标签时查找源分支(使用 gitlab-ci.yml)

使用 CLI 在 Gitlab 中创建存储库

无法在 Gitlab 服务器中创建管理员用户

无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”