什么是Ruby的捆绑器/ Perl的纸箱的Python等价物?
我知道virtualenv和点子。 但是这些与捆绑包/纸箱有些不同。
例如:
- pip写入shebang的绝对path或激活脚本
- pip没有
exec
子命令(bundle exec bar
) - virtualenv将Python解释器复制到本地目录
每个Python开发者都使用virtualenv / pip吗? 还有其他的Python包pipe理工具吗?
从我读过的关于bundler的内容来看 – 没有virtualenv的pip应该适合你。 你可以把它看作是普通的gem命令和bundler之间的东西。 普通的事情,你可以做点子:
-
安装软件包(gem install)
pip install mypackage
-
依赖和批量安装(gemfile)
可能最简单的方法是使用pip的requirements.txt文件。 基本上它只是一个可能的版本限制所需的软件包的简单列表。 它可能看起来像这样:
nose==1.1.2 django<1.3 PIL
稍后当你想要安装这些依赖时,你会这样做:
$ pip install -r requirements.txt
在需求文件语法中查看所有当前包的简单方法是:
$ pip freeze
你可以在这里阅读更多。
-
执行(bundler exec)
所有附带可执行文件的python包通常在安装后直接可用(除非你有自定义安装或者它是一个特殊的包)。 例如:
$ pip install gunicorn $ gunicorn -h
-
从caching中安装gem包(捆绑包)
有
pip bundle
和pip 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并从Pipfile
或Pipfile.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 – 你不需要一个,它的第一个头,从捆绑商的需求。