Python 如何将requirements.txt发送给没有开发包(如PyLint等)的用户。?

Python 如何将requirements.txt发送给没有开发包(如PyLint等)的用户。?,python,visual-studio-code,pylint,Python,Visual Studio Code,Pylint,我是python新手。我使用visualstudio代码 我目前的理解如下: 对于每个项目,我都创建一个虚拟环境。现在,如果我想在编码时使用一些linter,我需要使用“pip install pylint”来安装它。 如果我想现在将代码发送给用户,那么我应该创建一个requirements.txt。 但是,安装pylint后,它看起来是这样的: astroid==2.3.3 colorama==0.4.3 isort==4.3.21 lazy-object-proxy==1.4.3 mccab

我是python新手。我使用visualstudio代码

我目前的理解如下:

对于每个项目,我都创建一个虚拟环境。现在,如果我想在编码时使用一些linter,我需要使用“pip install pylint”来安装它。 如果我想现在将代码发送给用户,那么我应该创建一个requirements.txt。 但是,安装pylint后,它看起来是这样的:

astroid==2.3.3
colorama==0.4.3
isort==4.3.21
lazy-object-proxy==1.4.3
mccabe==0.6.1
pylint==2.4.4
six==1.13.0
wrapt==1.11.2
实际上,我的代码并不需要所有这些包,它们都来自pylint

  • 我怎样才能自动创建一个requirements.txt,其中只包含与我的代码相关的包(没有pylint内容)?python中的最佳/通常做法是什么
  • 或者这真的是包含所有内容的“正常”方式,我不应该太担心吗

您应该创建一个
requirements.txt
文件,其中包含运行项目所需的内容,以及一个
dev requirements.txt
文件,其中包括
requirements.txt
和您的开发依赖项。我发现最简单的管理方法就是使用一种工具,比如诗歌或诗歌

对于前者,您将有一个
requirements.in
,其中列出了未固定的执行依赖项。然后在
开发需求中。在
中,您将有:

-r requirements.txt
pylint

然后,您可以使用
pip compile
生成
requirements.txt
文件和
dev requirements.txt
文件和
pip sync
,以确保您环境中安装的软件包与需求文件中指定的内容相匹配。

您如何将代码“传送”给用户?您的项目是针对用户安装的软件包还是用户运行的应用程序而设计的?“如果我现在想将代码发送给用户,那么我应该创建一个requirements.txt”首先不是一个正确的假设。
requirements.txt
文件通常用于管理部署,它类似于一些其他语言所称的“锁定文件”。要指定依赖项,您需要一个
setup.py
文件或
pyproject.toml
文件。@IainShelvington它应该是一个用户可以运行的应用程序,就像用户获得脚本以便在其系统上运行一样。@wim据我所知,如果我编写的脚本需要安装包a,如果我把这个脚本给了其他人,而这个人想要运行它,那么必须首先安装包A,这样脚本才能正常运行。好像我误解了什么?没错。最好/通常的方法是使用包元数据指定依赖项。这就是
setup.py
(命令式)或
pyproject.toml
(声明式)所做的。现在,当其他用户使用pip安装您的代码时,它也将收集并安装依赖项A。感谢您提到pip工具!仅供参考,您可能会发现
-c requirements.txt
更方便。请参阅和讨论。@AlbertTugushev那么约束文件和使用requirements.txt之间的区别是什么?我认为约束只是为了确保满足特定的版本要求,但并不能保证最终会安装某些东西?如果您想分离基本需求和开发需求,这种方法可能会很有用。如果您使用
-r base requirements.txt
您将进入
dev requirements.txt
所有固定的基本需求和开发需求。但是如果您使用
-c base requirements.txt
,您将只获得开发需求,并且与基本需求相交的所有开发子需求都将遵守
base requirements.txt
中的固定版本。通过这种方法,您应该从dev stage的两个文件中安装req:
pip install-r base-requirements.txt-r dev requirements.txt
。与pip工具配合使用,就像一个符咒:)