在 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/
创建文件后,commit
和 push
将其保存到 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 中创建标签时查找源分支(使用 gitlab-ci.yml)
无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”