与npm或rubygems相当的Python

与npm或rubygems相当的Python,python,rubygems,npm,Python,Rubygems,Npm,我一直在寻找一个可以与python一起使用的包管理器。我想在文件中列出项目依赖项。例如,ruby使用Gemfile,您可以在其中使用bundle安装。 如何在python中实现这一点?pip工具正在成为Ruby gems的标准。与distribute类似,pip使用包存储库(默认情况下)解析和下载依赖项pip可以从列出项目依赖项的文件(按惯例称为requirements.txt安装依赖项): 您还可以使用pip“冻结”Python路径上的当前包: pip freeze > requirem

我一直在寻找一个可以与python一起使用的包管理器。我想在文件中列出项目依赖项。例如,ruby使用Gemfile,您可以在其中使用bundle安装。
如何在python中实现这一点?

pip工具正在成为Ruby gems的标准。与
distribute
类似,
pip
使用包存储库(默认情况下)解析和下载依赖项
pip
可以从列出项目依赖项的文件(按惯例称为
requirements.txt
安装依赖项):

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

pip freeze > requirements.txt

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

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

安装命令:

pip install -r requirements.txt
示例
requirements.txt
内容:

Foo >= 1.2
PickyThing <1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1
SomethingWhoseVersionIDontCareAbout
Foo>=1.2
PickyThing 1.9=1.9.6,管道NV
(我知道这是一个老生常谈的问题,它已经有了答案,但对于像我这样来这里寻找不同答案的人来说。)

我发现npm有一个非常好的等价物,叫做。它同时处理虚拟化和pip需求,因此更像npm


简单用例 然后,您可以使用第三版python制作一个新的virtualenv,还可以制作一个pipfile,其中将包含您的项目需求和其他内容:

pipenv install --three
使用您创建的virtualenv:

pipenv shell
 source env/bin/activate
安装新的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
激活virtualenv:

pipenv shell
 source env/bin/activate
现在,与
pip
的任何交互都包含在您的项目中

为每个依赖项运行
pip安装包\u name==version
。它们安装在
/env/lib/python3.x/site-packages/

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

 pip freeze > requirements.txt
如果您处于激活的特定于项目的virtualenv(您应该是)中,实际上不需要
-l
-local

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

 pip install -r requirements.txt

仅此而已。

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

关于
pipenv
的另一个答案。还有一个python包管理器,名为
poetry


这里有
pipenv
poerty
之间的详细比较:。它还将这些功能链接到常见的
npm
功能。

pip freeze
创建了我的虚拟环境中安装的所有库的列表。有没有办法自动排除当前项目不需要的内容?@Piotrek有一个
-l
(或
-local
)选项,可以满足您的要求@有点晚了,不过还是谢谢你;)我认为这个特别的选择值得单独回答。这似乎是一个非常有用的选择,没有人知道。这是我第一次听说pipenv-谢谢,这是伟大的pipenv没有提供npm提供的所有功能。它只管理依赖关系。