python pip 是否相当于 node 的 package.json?

dan*_*y74 17 python pip node.js npm

在 NodeJS 的 npm 中,您可以创建一个 package.json 文件来跟踪您的项目依赖项。当您想安装它们时,您只需运行npm install它,它会查看您的包文件并使用该单个命令安装它们。

在分发我的代码时,python 是否具有等效的概念,或者我是否需要在我的 README 中告诉人们安装每个依赖项,如下所示:

pip install package1
pip install package2
Run Code Online (Sandbox Code Playgroud)

在他们可以使用我的代码之前?

Moh*_*lal 33

最好的方法可能是Pipenv。我个人使用它。

\n

不过,在本指南中,我将解释如何仅使用 Python 和 pip 来完成此操作。并且没有pipenv。这是第一部分。它将使我们更好地理解 Pipenv 的工作原理。第二部分是处理pipenv。检查 Pipenv 部分(越接近 npm)

\n

Python 和 pip

\n

用Python把这一切都搞定。这里是主要要素:

\n
    \n
  • 虚拟环境
  • \n
  • 需求文件(包列表)
  • \n
  • pip 冻结命令
  • \n
  • 如何从需求文件安装软件包
  • \n
\n

虚拟环境及其原因

\n

请注意,为此要使用venv包。这是官方的事情。并从 3.3+ 开始附带 python 3 安装。

\n

要了解它是什么以及为什么,请查看\n https://docs.python.org/3/tutorial/venv.html

\n

简而言之,虚拟环境将帮助我们管理一个隔离版本的Python解释器。安装的软件包也是如此。这样。不同的项目不必依赖于相同的软件包安装而产生冲突。阅读上面的链接解释并很好地展示它。

\n
\n

...这意味着一个 Python 安装可能无法满足每个应用程序的要求。如果应用程序 A 需要特定模块的 1.0 版,但应用程序 B 需要 2.0 版,则要求会发生冲突,安装版本 1.0 或 2.0 都会导致应用程序无法运行。

\n
\n

您可能想查看Flask 框架文档上的解释。

\n

https://flask.palletsprojects.com/en/2.1.x/installation/#virtual-environments

\n

为什么我们关心这个并应该使用它。隔离项目。(每个都有它的环境)。然后冻结命令将在每个项目基础上工作。检查最后一节。

\n

用法

\n

这里有一个关于如何设置和工作的很好的指南:

\n

https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/

\n

首先检查安装部分。

\n

然后

\n

创建虚拟环境,请转到项目目录并运行:

\n

在 macOS 和 Linux 上:

\n
> python3 -m venv env\n
Run Code Online (Sandbox Code Playgroud)\n

在 Windows 上:

\n
> py -m venv env\n
Run Code Online (Sandbox Code Playgroud)\n
\n

注意您应该使用或类似的方法从版本控制系统中排除虚拟环境目录.gitignore

\n
\n

要开始使用控制台中的环境,您必须激活它

\n

https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#activating-a-virtual-environment

\n

在 macOS 和 Linux 上:

\n
> source env/bin/activate\n
Run Code Online (Sandbox Code Playgroud)\n

在 Windows 上:

\n
> .\\env\\Scripts\\activate\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅有关如何检查您是否处于环境中的部分(使用哪个(linux、unix)或哪里(windows))。

\n

要停用您使用

\n
> deactivate\n
Run Code Online (Sandbox Code Playgroud)\n

需求文件

\n

https://pip.pypa.io/en/latest/user_guide/#requirements-files

\n
\n

\xe2\x80\x9cRequirements files\xe2\x80\x9d 是包含要使用 pip install 安装的依赖项列表的文件,如下所示

\n
\n

如何安装需求文件

\n
> py -m venv env\n
Run Code Online (Sandbox Code Playgroud)\n
\n

需求文件用于保存 pip freeze 的结果,以实现可重复安装。在这种情况下,您的需求文件包含运行pip freeze安装的所有内容的固定版本

\n
\n
> source env/bin/activate\n
Run Code Online (Sandbox Code Playgroud)\n

一些语法:

\n
pkg1\npkg2==2.1.0\npkg3>=1.0,<=2.0\n
Run Code Online (Sandbox Code Playgroud)\n

== 精确。

\n
requests==2.18.4\ngoogle-auth==1.1.0\n
Run Code Online (Sandbox Code Playgroud)\n

强制 pip 接受早期版本

\n
ProjectA\nProjectB<1.3\n
Run Code Online (Sandbox Code Playgroud)\n

将 git 与标签一起使用(自己修复错误而不是等待)

\n
git+https://myvcs.com/some_dependency@sometag#egg=SomeDependency\n
Run Code Online (Sandbox Code Playgroud)\n

再次检查链接https://pip.pypa.io/en/latest/user_guide/#requirements-files \n我从中挑选了所有示例。你应该看看解释。还有细节。

\n

有关格式详细信息,请检查: https://pip.pypa.io/en/latest/cli/pip_install/#requirements-file-format

\n

冻结命令

\n

Pip 可以使用 freeze 命令导出所有已安装软件包及其版本的列表。在命令运行时。列出当前环境中所有已安装的软件包的列表。

\n
pip freeze\n
Run Code Online (Sandbox Code Playgroud)\n

这将输出类似的内容:

\n
cachetools==2.0.1\ncertifi==2017.7.27.1\nchardet==3.0.4\ngoogle-auth==1.1.1\nidna==2.6\npyasn1==0.3.6\npyasn1-modules==0.1.4\nrequests==2.18.4\nrsa==3.4.2\nsix==1.11.0\nurllib3==1.22\n
Run Code Online (Sandbox Code Playgroud)\n

我们可以将其写入需求文件中

\n
pip freeze > requirements.txt\n
Run Code Online (Sandbox Code Playgroud)\n

https://pip.pypa.io/en/latest/cli/pip_freeze/#pip-freeze

\n

安装软件包

\n

通过为每个项目使用 venv(虚拟环境)。这些项目是孤立的。然后 freeze 命令将仅列出该特定环境上安装的软件包。这是由项目基地组成的。冻结命令在运行时列出软件包。与确切的版本匹配。我们从中生成一个需求文件(requirements.txt)。我们可以将其添加到项目存储库中。并安装了依赖项。

\n

整个事情可以从这个意义上完成:

\n

Linux/Unix

\n
python3 -m venv env\nsource env/bin/activate\npip3 install -r requirements.txt\n
Run Code Online (Sandbox Code Playgroud)\n

视窗

\n
py -m venv env\n.\\env\\Scripts\\activate\npip3 install -r requirements.txt\n
Run Code Online (Sandbox Code Playgroud)\n

克隆存储库后首次设置。

\n

创建新环境。

\n

然后激活它。

\n

然后将需要的包安装到其中。

\n

否则,这里有一个关于使用官方文档中的 requiremnets 文件和虚拟环境安装包的完整指南:https ://packaging.python.org/guides/installing-using-pip-and-virtual-environments/

\n

第二个指南也显示得很好:https ://docs.python.org/3/tutorial/venv.html

\n

链接列表(已列出):

\n\n

Pipenv(更接近npm)

\n

https://pipenv.pypa.io/en/latest/

\n

管彭夫是一个尝试像 Python 的 npm 一样的工具。是一套超级pip。

\n

pipenv为我们创建虚拟环境。并管理依赖关系。

\n

一个很好的功能是能够像文件一样编写packages.json。其中也包含脚本部分。

\n

执行 pipfile 脚本

\n

在命令行中运行带别名的 python 命令,如 npm

\n

安装

\n

https://pipenv.pypa.io/en/latest/installation/

\n

virtualenv 映射警告

\n

https://pipenv.pypa.io/en/latest/installation/#virtualenv-mapping-caveat

\n

对我来说,在项目中创建环境(就像node_modules一样)应该是默认的。确保激活它。通过设置环境变量。

\n

pipenv可以看起来更方便。

\n

主要管理运行脚本是不容错过的。以及一款可以简化这一切的单一工具。

\n

基本用法以及与 npm 的比较

\n\n

请注意,npm 的等效项package.jsonPipFile文件。

\n

一个例子:

\n
> .\\env\\Scripts\\activate\n
Run Code Online (Sandbox Code Playgroud)\n

有像package.lock一样的Pipfile.lock

\n

运行npm install 等效项。你跑pipenv install

\n

安装新包

\n
> deactivate\n
Run Code Online (Sandbox Code Playgroud)\n
\n

如果\xe2\x80\x99 不存在,这将创建一个 Pipfile。如果确实存在,它将自动使用您提供的新包进行编辑。

\n
\n

就像 npm 一样。

\n
pip install -r requirements.txt\n
Run Code Online (Sandbox Code Playgroud)\n

如果PIPENV_VENV_IN_PROJECT=1设置了 env 变量。pipenv在项目内设置虚拟环境。它是在名为.venv的目录中创建的(相当于 node_modules)。

\n

还在目录中没有 PipFile 的情况下运行pipelinenv install 。既不是虚拟环境。.venv将在目录(相当于node_modules)上创建虚拟环境。并生成PipFilePipfile.lock

\n

在此输入图像描述

\n

安装烧瓶示例:

\n
python -m pip freeze > requirements.txt\npython -m pip install -r requirements.txt\n
Run Code Online (Sandbox Code Playgroud)\n

作为开发依赖项安装

\n
pkg1\npkg2==2.1.0\npkg3>=1.0,<=2.0\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
requests==2.18.4\ngoogle-auth==1.1.0\n
Run Code Online (Sandbox Code Playgroud)\n

就像 npm 一样。

\n

pipenv所有命令(pipenv -h)

\n
ProjectA\nProjectB<1.3\n
Run Code Online (Sandbox Code Playgroud)\n

命令帮助

\n
git+https://myvcs.com/some_dependency@sometag#egg=SomeDependency\n
Run Code Online (Sandbox Code Playgroud)\n

从requirements.txt导入

\n

https://pipenv.pypa.io/en/latest/pipfile/#importing-from-requirements-txt

\n

环境管理与pipenv

\n\n

pipenv跑步

\n

要在项目虚拟环境中运行任何内容,您需要使用pipenv run

\n

就像一样pipenv run python server.py

\n

自定义scripts快捷键

\n

scriptsnpm。或者tasks

\n

https://pipenv.pypa.io/en/latest/advanced/#custom-script-shortcuts

\n
pip freeze\n
Run Code Online (Sandbox Code Playgroud)\n

并运行

\n
cachetools==2.0.1\ncertifi==2017.7.27.1\nchardet==3.0.4\ngoogle-auth==1.1.1\nidna==2.6\npyasn1==0.3.6\npyasn1-modules==0.1.4\nrequests==2.18.4\nrsa==3.4.2\nsix==1.11.0\nurllib3==1.22\n
Run Code Online (Sandbox Code Playgroud)\n

就像 npm 一样。

\n
\n

如果您\xe2\x80\x99d 喜欢锁定文件的requirements.txt 输出,请运行$ pipelinenv lock -r。然而,这将包括所有哈希值(这很棒)。要获取不带哈希值的requirements.txt,请使用 $ pipelinenv run pip freeze。

\n
\n

使用 Pipenv 进行部署

\n\n

值得一提的是,pipenv cli渲染也做得很好:

\n

在此输入图像描述

\n

请务必阅读基本指南。主文档链接确实包含所有链接。

\n

可见其有多么富有pipenv

\n


has*_*ram 18

一旦添加了所有必要的包

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

创建需求文件。

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

再次安装这些软件包,比如在生产期间。

  • 这将列出所有已安装的软件包,而不仅仅是项目使用的软件包。因此,如果不在虚拟环境中使用,请小心。但我认为没有任何办法可以解决这个问题。 (5认同)

Gee*_*bhu 12

安装完所有软件包后,运行

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

这会将包详细信息保存在文件中requirements.txt

要安装,请运行

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

安装 指定的软件包requirements.txt


Hal*_*Ali 7

是的,它被称为需求文件:

https://pip.pypa.io/en/stable/cli/pip_install/#requirement-specifiers

您可以指定包名称和版本号。

您还可以指定 git url 或本地路径。

通常情况下,您会指定包后跟版本号,例如

sqlalchemy=1.0.1
Run Code Online (Sandbox Code Playgroud)

您可以requirements.txt通过命令安装文件中指定的所有包

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

  • 它指定下一个参数应解释为文件而不是要安装的包。 (3认同)