Ruby的bundler/Perl纸盒的Python等价物是什么?

riy*_*ywo 92 ruby python perl pip virtualenv

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

例如:

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

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

Den*_*lin 69

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

  1. 安装包(gem install)

    pip install mypackage
    
    Run Code Online (Sandbox Code Playgroud)
  2. 依赖关系和批量安装(gemfile)

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

    nose==1.1.2
    django<1.3
    PIL
    
    Run Code Online (Sandbox Code Playgroud)

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

    $ pip install -r requirements.txt
    
    Run Code Online (Sandbox Code Playgroud)

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

    $ pip freeze
    
    Run Code Online (Sandbox Code Playgroud)

    你可以在这里阅读更多相关信息.

  3. 执行(捆绑执行)

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

    $ pip install gunicorn
    $ gunicorn -h 
    
    Run Code Online (Sandbox Code Playgroud)
  4. 从缓存(bundler包)安装包安装宝石

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

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

  • 关于bundler的好处就是整合了*virtualenv*部分,在大多数情况下,不需要管理员权限.事实上,捆绑可能是全球唯一需要的宝石.`bundle install --path vendor`在本地安装所有东西,`bundle exec`足够聪明,可以解决这个问题.无需明确的环境变化. (44认同)
  • 我不认为第3点是正确的.简单地运行ruby可执行文件可以使用或不使用`bundle exec`来完成.`bundle exec`的重点在于它在运行可执行文件之前根据`Gemfile`改变了环境.Pip没有相当于`bundle exec`,虽然virtualenv可能. (11认同)
  • 关于bundler的主要内容是它现在是一个事实上的标准,你几乎可以保证几乎任何大小的任何ruby项目都会有一个`Gemfile`坐在它的root中,你可以`捆绑安装'而且你很好要去,或者"捆绑 - 部署",它只会在服务器上运行而没有其它任何事情可以提供机器上有所需的ruby版本.Python根本就没有等价物.工具在那里,文化无处不在. (8认同)

non*_*ene 13

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

$ pip install pipenv
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

您可以使用virtualenv范围运行命令bundle exec.

$ pipenv run python3 -c "print('hello!')"
Run Code Online (Sandbox Code Playgroud)