什么是Ruby的捆绑器/ Perl的纸箱的Python等价物?

我知道virtualenv和点子。 但是这些与捆绑包/纸箱有些不同。

例如:

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

每个Python开发者都使用virtualenv / pip吗? 还有其他的Python包pipe理工具吗?

从我读过的关于bundler的内容来看 – 没有virtualenv的pip应该适合你。 你可以把它看作是普通的gem命令和bundler之间的东西。 普通的事情,你可以做点子:

  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 

    你可以在这里阅读更多。

  3. 执行(bundler exec)

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

     $ pip install gunicorn $ gunicorn -h 
  4. 从caching中安装gem包(捆绑包)

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

ps如果你关心环境隔离,你也可以使用virtualenv和pip(他们是亲密的朋友,完美地一起工作)。 默认情况下,pip安装可能需要pipe理员权限的系统范围的软件包。

有一个克隆pbundler 。

目前在pip中的版本只是读取你已经拥有的requirements.txt文件,但是已经过时了。 这也不完全等同:它坚持做一个virtualenv 。 Bundler,我注意到,只安装了什么软件包丢失,并给你select让你的sudo密码安装到你的系统目录或重新启动,这似乎不是pbundler的function。

然而,git上的版本几乎完全重写,与Bundler的行为更接近…包括拥有“Cheesefile”,现在不支持requirements.txt。 这是不幸的,因为requirements.txt是pythonland中的事实标准,甚至还有官方的BDFL标记工作来标准化它 。 当它生效的时候,你可以肯定,像pbundler这样的事情将成为事实上的标准。 唉,没有什么相当稳定的,但我知道的(但我希望被certificate是错误的)。

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

 $ pip install pipenv 

Pipenv自动创buildvirtualenv并从PipfilePipfile.lock安装依赖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 

你可以像bundle exec一样使用virtualenv作用域来运行命令。

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

不,不是所有的开发者都使用virtualenv和/或pip,但许多开发者使用/偏好这些工具

而现在,对于包开发工具和不同的环境,这是你真正的问题。 为了同样的目的,存在任何其他工具,例如Buildout( http://www.buildout.org/en/latest/ ),隔离你的环境为你pipe理的每个项目build立Python系统。 有一段时间我用这个,但不是现在。

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

我写了一个 – https://github.com/Deepwalker/pundler 。 在PIP上,这个名字已经被使用了。

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

关于(_\w+)? 东西 – 这是envs。 你可以创buildrequirements_test.txt,然后使用PUNDLEENV=test在你的PUNDLEENV=test中运行这个代码。

而关于virtualenv – 你不需要一个,它的第一个头,从捆绑商的需求。