Python 相当于 npm 还是 rubygems?

我一直在寻找一个可以与 python 一起使用的包管理器。我想在一个文件中列出项目依赖项。

例如,Ruby 使用 Gemfile,其中可以使用 bundle install。

我如何在 Python 中实现这一点?

34701 次浏览

pip工具正在成为相当于 Ruby 的 gem 的标准。

distribute一样,pip使用 PyPI包存储库(默认情况下)来解析和下载依赖项。

pip可以从一个列出项目依赖项的文件中安装依赖项(按惯例称为 requirements.txt) :

pip install -r requirements.txt

您也可以使用 pip“冻结”Python 路径上的当前包:

pip freeze > requirements.txt

当与 virtualenv包结合使用时,您可以可靠地创建具有项目所需依赖项的项目 Python 环境。

Python 使用 pip作为包管理器。pip install命令有一个 -r <file>选项,用于从指定的需求文件安装包。

安装命令:

pip install -r requirements.txt

示例 requirements.txt内容:

Foo >= 1.2
PickyThing <1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1
SomethingWhoseVersionIDontCareAbout

有关格式的完整描述,请参阅文档的需求解析部分: https://pip.pypa.io/en/stable/user_guide/#requirements-files

Pipenv

(我知道这是一个老问题,而且它已经有了答案,但对于像我这样来这里寻找不同答案的人来说。)

我发现了一个 非常好的 npm 等价物,它叫 。它处理两个 同时满足虚拟连接和 pip 需求,所以它更像 npm。


简单用例

pip install pipenv

然后你可以用 Python 的第三个版本创建一个新的 viralenv,同时创建一个 管子来填充你的项目需求和其他东西:

pipenv install --three

使用您创建的 viralenv:

pipenv shell

安装一个新的 python 包:

pipenv install requests

运行.py 文件就像这样:

pipenv run python somefile.py

你可以找到 给你医生。

这就是我如何将 pip的作用域限制在当前项目中的方法。如果您来自 NodeJS 的 npm或 PHP 的 composer,那么您会感觉到相反的情况,您可以使用 -g--global显式地指定全局安装。

如果您还没有安装 virtualenv,那么通过以下方式在全球范围内安装它:

 pip install virtualenv

每个 Python 项目都应该有自己的 virtualenv安装。设置一个非常简单,只需要将 cd设置为项目的根目录,然后:

 python3 -m virtualenv env  # creates env folder with everything you need

激活 viralenv:

 source env/bin/activate

现在,与 pip的任何交互都包含在项目中。

对每个依赖项运行 pip install package_name==version。它们安装在 ./env/lib/python3.x/site-packages/

如果要将项目的依赖项保存到文件中,请运行:

 pip freeze > requirements.txt

如果您处于一个激活的特定于项目的 viralenv (应该是这样的)中,那么实际上不需要 -l--local

现在,当您想要从 requirements.txt安装您的依赖项时,设置您的 viralenv,然后运行:

 pip install -r requirements.txt

仅此而已。

这是一个古老的问题,但事情在不断发展。

除了另一个关于 pipenv的答案之外,还有一个名为 poetry的 Python 包管理器。

这里有一个 pipenvpoerty的详细比较: Npm、 pip、 pipenv 与诗歌包装经理的特征比较。它也链接到 npm的常见功能的特点。

下面是 pipenvpoetrypdm的比较: < a href = “ https://dev.to/rostming/a-review-pipenv-vs-song-vs-pdm-39b4”rel = “ nofollow noReferrer”> https://dev.to/frostming/a-review-pipenv-vs-poetry-vs-pdm-39b4 结论是 pdm是赢家。

但根据我的经验,与 pdm相比,poetry更容易与 IDE 集成。