Ruby的bundler / Perl的纸箱的Python等效项是什么?


93

我了解virtualenv和pip。但是这些与捆包机/纸箱有点不同。

例如:

  • pip写入shebang或激活脚本的绝对路径
  • pip没有exec子命令(bundle exec bar
  • virtualenv将Python解释器复制到本地目录

每个Python开发人员都使用virtualenv / pip吗?还有其他适用于Python的软件包管理工具吗?


4
不,并非每个Python用户都使用virtualenv。我个人从来不需要它。
Fred Foo 2012年

我不知道完全像Ruby bundler一样的东西(直到现在我都不知道,顺便说一句)。我要做的是同时使用virtualenv pip setuptools-或distutils或我首先在Google中找到的任何分发系统:)我也很好奇一个答案,但这通常是我的解决方案。
brandizzi 2012年

pipenvshovel下面提到的是更现代的选择,因为这个问题被问。
Jim Meyer

pipenv和铲子都不等效。铁铲就像捆扎机,更像耙子。Python依赖项管理远远落后。不过,有一天它会合并为pip(pypi.org/project/pipfile)…
Nomas Prime

Answers:


72

根据我对捆绑程序的了解,不带virtualenv的pip应该对您来说很好。您可以将其视为常规gem命令和捆绑程序之间的某种东西。点子可以做的常见事情:

  1. 安装软件包(gem安装)

    pip install mypackage
  2. 依赖项和批量安装(gemfile)

    可能最简单的方法是使用pip的requirements.txt文件。基本上,这只是带有可能的版本限制的必需软件包的简单列表。它可能看起来像:

    nose==1.1.2
    django<1.3
    PIL

    稍后,当您要安装这些依赖项时,您将执行以下操作:

    $ pip install -r requirements.txt

    查看需求文件语法中当前所有软件包的一种简单方法是:

    $ pip freeze

    您可以在此处了解更多信息。

  3. 执行(捆绑程序执行)

    安装后通常会直接提供所有带有可执行文件的python软件包(除非您有自定义安装程序,否则这是一个特殊的软件包)。例如:

    $ pip install gunicorn
    $ gunicorn -h 
  4. 从缓存安装的软件包gem(捆绑包)

    pip bundlepip zip/unzip。但是我不确定是否有很多人使用它。

ps如果您确实关心环境隔离,那么还可以将virtualenv与pip一起使用(他们是密友,并且可以完美地合作)。默认情况下,pip在系统范围内安装软件包,这可能需要管理员权限。


46
捆绑软件的好处在于,virtualenv部分已集成,并且在大多数情况下,不需要管理员权限。实际上,捆绑软件很可能是全球唯一需要的宝石。bundle install --path vendor在本地安装所有内容,并且bundle exec足够聪明以解决此问题。无需进行明确的环境更改。
Debilski

11
我认为第3点是不正确的。只需运行ruby可执行文件,即可完成或不执行bundle exec。整个问题bundle exec在于,它会Gemfile在运行可执行文件之前按照更改环境。Pip与等效bundle exec,尽管virtualenv可能如此。
肖恩·马克西

@SeanMackesey每当您运行对virtualenv环境的激活时,您都会立即进入该环境内部,例如python指向env中的一个,而不是全局安装的一个,pythonpath对于env是正确的,所有应用程序也都从该env运行。
Denys Shabalin

8
捆扎机的主要功能是现在是事实上的标准,您几乎可以保证几乎任何大小的任何红宝石项目都将Gemfile在其根中坐享其成,并且您可以,bundle install而且您也很好,或者bundle --deployment,并且只要机器上具有所需版本的ruby,它就可以在服务器上运行且几乎不需要执行其他操作。Python根本没有等效项。工具在那里,文化无处不在。
ocodo

14

您可以使用pipenv,它与bundler具有相似的接口。

$ pip install pipenv

Pipenv自动创建virtualenv并从Pipfile或安装依赖项Pipfile.lock

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

您可以运行带有virtualenv作用域的命令,例如bundle exec

$ pipenv run python3 -c "print('hello!')"

3

有一个克隆pbundler

当前在pip中的版本只是读取 requirements.txt您已经拥有文件,但是已经过时了。它也不是完全等同的:它坚持要virtualenv。我注意到,Bundler仅安装缺少的软件包,并提供给您选择将sudo密码安装到系统目录或重新启动的选项,这似乎不是pbundler的功能。

但是,git上的版本几乎可以完全重写,更接近于Bundler的行为……包括拥有“ Cheesefile”,现在不支持requirements.txt。不幸的是,因为requirements.txt是pythonland中的事实上的标准,并且甚至有正式的BDFL标记的工作来对其进行标准化。当这开始生效时,您可以确定像pbundler这样的东西将成为事实上的标准。唉,没什么相当稳定但据我所知,(但我喜欢被证明是错误的)。


这个项目似乎已经消失了。考虑诗歌:stackoverflow.com/a/61771381/115075
bb。

1

我写了一个-https://github.com/Deepwalker/pundler。在PIP上pundle,名称已被使用。

它使用requirements(_\w+)?.txt文件作为所需的依赖关系并创建frozen(_\w+)?.txt具有冻结版本的文件。

关于(_\w+)?事情-这是环境。您可以创建requirements_test.txt,然后使用PUNDLEENV=test Requirements_test.txt在运行时将Requirements.txt与它们一起使用。

关于virtualenv –您不需要一个,它的捣蛋头从打捆机中取出。


1

我想说铲子值得一看。它是专门为Python版本的Rake开发的。该项目上没有大量的提交活动,但似乎稳定且有用。


1

截至2020年(并且自2018年以来),Python Poetry是最接近Ruby捆绑器的。它已经有两年多的历史了,但仍然非常活跃,拥有出色的文档。有人可能会抱怨curl-pipe-python-style是推荐的安装方式,但是还有其他选择,例如macOS上的自制软件。

它在后台使用了virtualenvs(与bundler相比),但是它提供并使用了一个锁定文件,负责处理子依赖项,遵守指定的版本限制,并允许自动更新过时的软件包。您喜欢的shell甚至具有自动补全功能。

通过使用pyproject.toml文件,它还比bundler(更接近gemspec。它还可以与JavaScript和TypeScript的npm和yarn比较)。

Poetrify(一个补充项目)有助于将项目从Requirements.txt转换为pyproject.toml进行诗歌创作。

poetry export -f requirements.txt > requirements.txt如果您需要将其用于其他工具(或者想返回的情况不太可能),可以通过将锁定文件导出到requirements.txt 。


0

不,并非所有开发人员都使用virtualenv和/或pip,但是许多开发人员使用/更喜欢这些工具

现在,对于软件包开发工具和不同的环境,这是您真正的问题。为了相同的目的,存在其他任何工具,例如Buildout(http://www.buildout.org/en/latest/),为您管理的每个项目隔离环境Python构建系统。一段时间以来,我一直使用它,但是现在不使用。

在Python中,每个项目的独立环境与Ruby中的相同情况略有不同。在我的情况下,我使用pyenv(https://github.com/yyuu/pyenv),类似于rbenv,但是对于Python。每个项目使用不同版本的python和virtualenvs,在这种隔离的环境中,我可以使用pip或易于安装(如果需要)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.