Ruby的Bundler / Perl的纸盒有哪些Python等价物?

时间:2012-01-04 11:37:34

标签: python ruby perl virtualenv pip

我知道virtualenv和pip。但这些与bundler / carton有点不同。

例如:

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

每个Python开发人员都使用virtualenv / pip吗?是否有其他Python包管理工具?

8 个答案:

答案 0 :(得分:70)

从我所读到的关于bundler的内容 - 没有virtualenv的pip应该对你有用。您可以将它视为常规gem命令和bundler之间的内容。你可以用pip做的常见事情:

  1. 安装包(gem install)

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

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

    nose==1.1.2
    django<1.3
    PIL
    

    稍后当您想安装这些依赖项时,您会这样做:

    $ pip install -r requirements.txt
    

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

    $ pip freeze
    

    您可以阅读更多相关信息here

  3. 执行(bundler exec)

    所有带有可执行文件的python包通常在安装后直接可用(除非您有自定义安装或它是一个特殊的包)。例如:

    $ pip install gunicorn
    $ gunicorn -h 
    
  4. 从缓存(捆绑包)

    打包安装宝石

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

  5. p.s。如果您关心环境隔离,您还可以将virtualenv与pip一起使用(他们是亲密的朋友并且完美地协同工作)。默认情况下,pip会在系统范围内安装可能需要管理员权限的软件包。

答案 1 :(得分:12)

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

$ pip install pipenv

Pipenv自动创建virtualenv并安装来自PipfilePipfile.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

您可以使用像bundle exec这样的virtualenv范围运行命令。

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

答案 2 :(得分:4)

有一个克隆pbundler

目前位于pip的版本只读取您已有的requirements.txt文件,但已过时。它也不完全等同:它坚持制作virtualenv。我注意到,Bundler只安装了缺少的软件包,并允许您选择将sudo密码安装到系统目录或重新启动,这似乎不是pbundler的功能。

然而,git上的版本几乎完全重写,更接近Bundler的行为......包括有一个&#34; Cheesefile&#34;现在不支持requirements.txt。这是不幸的,因为requirements.txt是pythonland中事实上的标准,甚至还有standardize it的官方BDFL标记工作。当它生效时,你可以确定像pbundler这样的东西将成为事实上的标准。唉,我所知道的并不是很稳定(但我会被证明是错误的。)

答案 3 :(得分:1)

我写了一个 - https://github.com/Deepwalker/pundler。 在PIP上pundle,已经取名。

它使用requirements(_\w+)?.txt个文件作为您所需的依赖项,并使用冻结版本创建frozen(_\w+)?.txt个文件。

关于(_\w+)?事 - 这是envs。您可以创建requirements_test.txt,然后使用PUNDLEENV=test在您的运行中使用此deps,其中包含requirements.txt。

关于virtualenv - 你不需要一个,它是第一个头上的捆绑器所带来的。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

通过使用pyproject.toml文件,它还比捆绑器(更接近gemspec。它还可以与JavaScript和TypeScript的npm和yarn相提并论)。

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

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

答案 6 :(得分:1)

您可以使用 pipx 在隔离环境中自动安装和运行 Python 应用程序。

您可以使用 pipenv 自动为您的项目创建和管理 virtualenv。

两者都使用虚拟环境工具包装 pip,并针对不同的用例。

所有这些都是 github PyPA repository 中列出的最受关注的项目之一。

仅供参考:Debian Bullseye/testing 目前缺少 pipx。但是来自 sid 的包应该可以正常工作。 (2021-06-19)

答案 7 :(得分:0)

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

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

每个项目的独立环境,在Python中与Ruby中的相同情况略有不同。在我的情况下,我使用pyenv(https://github.com/yyuu/pyenv),就像rbenv,但对于Python。每个项目有不同版本的python和virtualenvs,在这个孤立的环境中,我可以使用pip或easy-install(如果需要的话)。